Monadそのものの意味が気になって気になってHaskellコードが書けない

2008-08-24T20:58:24 / haskell, prog / comment

最近はHaskellについて勉強したりしていなかったりするのですが、Haskellで実用的なコードを書くにあたってはどうしてもmonadを利用しなければなりません。とはいえ、monadの振舞いさえ把握すれば良く、monadそのものについての意味は把握する必要はありません。その点については青木本にも書かれていましたし、先日お会いしたujihisaさんにも言われました。

確かにその通りなのですが、私の場合、はぐらかされたmonadそのものについての詳細が気になって気になって仕方がない質で、そこで詰まって一向にHaskellの勉強が進みません。いや、一応はスルーして進めてはいるものの、どうしても気になって仕方がありません。最近あった類似する問題としては、gitの下位レベルの仕組みなどが挙げられます。gitの方は公式のドキュメントを読めばすぐに理解できるので良かったのですが、monadの方は難易度が高すぎて手も足も出せない状態です。

さらに、適当に調べた結果、monadはcategory theoryに由来する概念だと知りました。Category theoryも面白そうだったので何年か前に勉強しようとしたことはあるのですが、あまりにも難解過ぎて挫折しました。そのcategory theoryに由来する概念だとすればmonadが難解なのも頷けます。これなら深追いしない方が懸命なのかも知れませんが、気になって仕方がないことには変わりなく、むしろこれを機にcategory theoryにも再挑戦しようかと思ってしまいます。

むぅ、どうしたものか。

Vim勉強会#3に参加&発表しました

2008-08-24T08:11:09 / vim, off / comment

Vim勉強会#3に参加&発表しました。朝早くからVim大好キー総勢7名が集結しました。今回は前回のようにネットワーク環境がなかったため、Lingrやustreamなどを通して勉強会の様子を外部に伝えられなかったのが残念でした。以下、当日の様子:

Vim本読書会

Vi IMproved - Vim完全バイブル」の19章から21章までをextreme readingしました。以下、主な話題:

19章 - 正規表現を使った高度な検索

20章 - さまざまなテキストブロックと複数ファイル

21章 - ウィンドウとセッション: 完全解説

kozo-ni's talk「vimへの異常な愛情または私は如何にして記号前後の空白に心配するのを止めてsmartchr.vimを愛するようになったか」

一言で表せば「smartchr完全解説」でした。詳細はkozo-niさんの発表資料を参照してください。以下、補足のようなもの:

kozo-niさんの発表動画を公開しました。

kana's talk「Vimの極め方」

Vimの極め方」というお題で発表しました。内容的には「2007年の抱負: Vimを極める」を実践するにあたって試行錯誤してきたことのまとめです。発表内容で挙げた事項を実践すると半年で戦闘力(訳注: vimrcの行数)が10倍になります。

しかし発表自体はぐだぐだでアドリブきかず抑揚が今一という酷い有様でした。次のVimM#2ではもっとまともな発表ができるように頑張りたいと思います。

その他

本勉強会の主催・宿の提供・「Haskell入門」の贈与をしていただいたujihisaさんに感謝します。もう足を向けて寝ることができません(でも泊まったときは配置的に足を向けていたという事実)。

あと、大阪を徘徊しすぎて疲れました。10分弱を1時間強とか、私の方向音痴具合はどこまでひどいんだ。荷物のMacBookは携帯するには地味に重いため、MacBook Airが非常に羨しかったです。

Vim: ku 0.1.0

2008-08-10T03:11:07 / vim, release / comment

ku 0.1.0をリリースしました。今時の若い人には「フィジーファインダーっぽいやつ」で、以前からVimを使っている人には「lookupfileっぽいやつ」で説明が事足りる気がするVimプラグインです。

元々、バッファを「適当」に選択するためにbuffuzzyというプラグインを去年作成したのですが、バッファのみにするのは勿体無いので汎用のものを作ろうと書き直してzapitというプラグインになりました。しかしzapitも色々とダサかったため、さらに書き直してできたのがku 0.0.0でした。ku 0.0.0もコンセプト的に少々アレで、ちょうど最近になって「自動的に機能が強化されるプラグイン」というアイデアを思いついたので、それを盛り込みつつ書き直してできたのがku 0.1.0です。正直、フィジーファインダーが大人気過ぎるのでwww.vim.orgにはアップロードする気はなかったのですが、後述する件がなかなか良い感じだったので気が変わりました。

Blurbとしては、「一定ルールに従って記述されたスクリプト(source)をautoload/ku/下に置くだけで自動的に扱えるアイテムの種類が増える」、「アイテムの種類に応じて様々なアクション(動作)を選択・実行できる」、「bluewindライクなディレクトリ名の自動補完」、「kanaに最適化されたUI」が挙げられます。特にmetarwで扱える疑似ファイルは全て自動でkuから利用できるようになっているところが熱いです。

実際にどんな感じで使用できるのかはkuのデモを見てください。前半はファイルやバッファを開くデモで、後半はmetarw-gitが提供する疑似ファイルをkuで選択して開くデモです。

現状でも満足しているのですが、機能的には微妙に気に食わない点があるので、ぼちぼち修正していく予定です。特にmetarwとの絡みは当面の利便性のために適当に実装されていて本来のコンセプトに反しているため、早く修正しないといけません(ku本体とsourceは完全に分離されているべきだが、metarw関連はku本体で面倒を見ている。本来のコンセプトに従うならmetarwのパッケージにku用のsourceが含まれるべき)。

Vim: metarw 0.0.0 / metarw-git 0.0.0

2008-08-10T02:39:29 / vim, release / comment

metarw 0.0.0とmetarw-git 0.0.0をリリースしました。metarw-gitはgitリポジトリ内の各種オブジェクトをgit:HEAD~3:src/ui.cgit:ORIG_HEAD:src/のような形式の引数を(:editなどで)開けるようにするVimプラグインで、metarwはこのようなURIライクな引数で示される対象を読み込んだり書き込んだりするためのフレームワークを提供するライブラリ的なVimプラグインです。

この手の疑似ファイルを提供するプラグインは標準で添付されているnetrwなどがありますが、同様の機能を一から実装しようとすると案外面倒です。metarwを使うとその手の面倒ごとは考えずに済み、本質的な箇所(疑似ファイルの読み込みや書き込み)に集中することができます。metarw自体には特に設定項目はなく、(metarw-gitのように)ある程度のルールに従って書かれたスクリプトをautoload/metarw/以下に置くだけで自動的に扱える疑似ファイルの種類が追加されます。

また、metarw-gitではあるコミットに含まれるディレクトリ(git:topic/branch:src/)やリポジトリそのもの(git:)が開かれた場合、新たに作成されるバッファはファイルやディレクトリあるいはブランチの一覧の表示と任意の項目を選んで開くことができる簡易ブラウザーとなります。この簡易ブラウザー機能はmetarwで提供されているので、他の疑似ファイルにおいても簡単に同様の機能を提供することができます。

実際にどんな感じで使用できるのかはmetarwのデモを見てください。

元々は「カレントブランチとは別のブランチにあるファイルの内容を確認したい」という個人的な要求から生まれたのですが、案外便利なので重宝してます。実際、metarw自体を開発している最中は並行して他に2つのプラグインを書いていたため活躍していました。