2008年6月25日水曜日

TheSchwartzを使って重たい処理を非同期に行い、手元はサクサクに

昨日id:rytich経由でGearmanやTheSchwartzというキーワードを知りました。
調べてみるとこれがなんだかとても面白そうで、実装に必要なCPANモジュールも完備されてるので何かやってみようと思い、出来たのはWWW::YourFileHostを使った非同期なダウンローダーです。

codecheck.inに置いてます

これを使うと、こんな感じになります。


  • URLを指定してキューを追加して終了。軽くてサクサク(client.pl)

  • キューに登録されたURLを元にコンテンツをゲット。重たいけどきっちりこなす(worker.pl)



これの何がうれしいかというと、コンテンツをゲットする部分を待たずに、
どんどんゲットしたいURLを投げつける事が出来る事にあります。

通常はコンテンツをゲットする時にリクエストを投げた後、対象のゲットが完了するまで待つ必要があるわけですが、
こうやる事でリクエストを投げる部分においてはそのリクエストをさばいてくれるworkerに投げっぱなしでよいのです。
シェルもすぐ帰ってくるし、次々リクエストだけ先行して行えるわけです。

これは、回線があまり速くない僕のようなユーザーにはありがたい。
バンバン追加して寝て起きたら終わっているみたいな。
今ゲットしてる最中だから終わるまで待っていようとか新しくシェル起動しようとか、そういうのも不要になります。

このclient.pl部分をBookmarklet化して今見ているものをDLキューに登録する。
とか、なかなか便利になりそうな気がしますです(少なくとも僕はw)。

ブクマ登録やreblog等一見処理は単純だけど相手先の状況で処理時間が大幅に変動する。
みたいな場面に置いて、手元の自由がすぐ効くようになるのはとっても便利。

今回、以下のリンクが大変参考になりました。



多分よいこはまねしないほうがいいですヨ

2008年6月22日日曜日

Vimキーバインド強制plugin"鬼軍曹.vim"をコミットした

Via: Emacsキーバインド強制elisp"鬼軍曹.el"をcommitした

Emacsのキーバインドに慣れるため、強制的にカーソルキー他の機能を無効化してしまう鬼軍曹.elファイルがリリースされています。

これの作者のid:k1LoWからvim版作ってちょ、と言われていたので、単にmap設定をpluginに突っ込むというかなりお手軽な方法で、鬼軍曹な.vimが誕生しました。

鬼軍曹.vim
ダウンロード用鬼軍曹.vim

使い方は鬼軍曹.vimを、

~/.vim/plugin/drill-instructor.vim


とかに置いてもらえればOKです。

基本的にはEmacs版と同じようにカーソルキー等を無効にするわけですが、Vimはおおまかにコマンドモードとインサートモードの二つのモードが存在するため、その両方ともにカーソルキーを使えなくしてみました。

もし、間違えてカーソルキーを打ってしまってもステータスラインに、

Don't use left-key!!! Press [h]


と、鬼軍曹.elと同じく優しく叱ってくれますのでご安心を。
でも、決してカーソルが動いてくれる事はありません。厳しい!

ちなみにインサートモード時にカーソルキーを押してしまった場合、

Don't use left-key!!! Press [ESC] to [h]


と、一旦コマンドモードに戻ってからカーソルを移動させるのがVimの流儀だ、と教えてくれます(これ、僕はこう思っているんですが、一般的にはインサートモードのままカーソル動かしたりしますかね?)

ビジュアルモードの時も強制しようとか色々あるんですが、
map設定はひとつ覚えればわかりやすくてとっつきやすいので、これ以上Mな環境にしたい方は直接.vimrcなりにmapをガンガン書いちゃう方が早いかもです。

2008年6月17日火曜日

vim7の配列と連想配列メモ

vim7では、配列をList, 連想配列をDictionaryと言う。

配列
let array = ['one', 'two', 'three']
for val in array
echo val
endfor


連想配列
let dic = {'one': 'een', 'two': 'twee', 'three': 'drie'}
for key in keys(dic)
echo key . ': ' . dic[key]
endfor


なんかとってもJavaScriptっぽい。

let dic = {
'one': 'een',
'two': [
{'option': 'a'},
{'option': 'b'},
{'option': 'c'}
],
'three': { 'option': 'd' }
}


入れ子も全然OKだけど、実はこのままでは動かない。

let dic = {
¥ 'one': 'een',
¥ 'two': [
¥ {'option': 'a'},
¥ {'option': 'b'},
¥ {'option': 'c'}
¥ ],
¥ 'three': { 'option': 'd' }}


と、改行エスケープすればおk

2008年6月11日水曜日

iPhone予約した

7年付き合ってるAUから移行しようか迷っていましたが、きっとWiFiでのデータ通信をメインにするならそんなにお金かからないだろうと目論み、新規でいってみようかなーとおもとります。

2008年6月6日金曜日

CakePHPのMVC間を動き回れるcakephp.vimを作ってみた

CakePHPのMVC間を動き回れるcakephp.vimを作ってみた。

http://trac.codecheck.in/share/browser/dotfiles/vim/cohtan/.vim/plugin/cakephp.vim

設計とかくそです。とりあえず、:help usr_41みながらまずは動くものをとこさえてみました。
appの中でvim . とかしないといけないくらいしょぼい(カレントディレクトリがapp内限定)ですが、


  • :CakecontrollerでModelやViewから該当のControllerへ移動。Viewからの場合は該当functionの先頭行へ飛ぶ

  • :CakemodelでControllerやViewから該当Modelへ移動

  • :CakeviewでControllerから該当Viewへ移動



とか、そんな感じです。
一人でコツコツCake使って書いているとMVC間をむっちゃ横断するので、少しでも手軽に横断出来ないものか。
と常々思っていました。

rails.vimにはまだまだ到底及びませんが、MVC間の移動が楽になっただけでも便利っぽいです。

ちなみにこれのEmacsバージョンをk1LoW氏が作っています

久しぶりにブログを書く

最初ログインできなくて焦った。 いや、ログインはできたのだが、ログイン後に自分のブログの管理画面に遷移できず、新しいブログを作成する画面になってしまったからビビッてしまった。 どうやら、Google+(現在はサービス終了)に紐づいたプロフィールを設定しているとこのような状況に陥る...