アーカイブ

2008 年 11 月 20 日 のアーカイブ

[vimperator]リクエスト結果をバッファ出力(muilti_requester.js)

2008 年 11 月 20 日

vimperator が便利すぎてやばい。

元々、ほんの些細なブラウザ操作でもキーボードから手を離すのがかなりのストレスになるのだが、マウスでブラウザ操作するのは半ば諦めていたのに、かなり軽減された。

今までもなるべく手間を減らすように、ブックマークにキーワードを設定したり、Ctrl + L とかでアドレスバーなどにフォーカス後、URL を入力して飛んだりしていたのだけれど、検索や辞書などはそこからまたキーワードを入力せねばならなかったり。

しかし、それが 以下の vimperator plugin でかなり改善された。
Web辞書を引いて結果をバッファウィンドウに出力するvimperatorプラグイン – hogehoge はてなブックマーク数
しかし、
「リクエストしてレスポンスをバッファに表示したい内容」
って、結構沢山ありそうで、もう少し拡張性がほしくなったので、プラグイン書いた。

CodeRepos::Share – Trac – _libty.js (共通ライブラリ) はてなブックマーク数
CodeRepos::Share – Trac – multi_requester.js (for vimperator ver. 1.2) はてなブックマーク数
CodeRepos::Share – Trac – multi_requester.js (for vimperator ver. 2.0pre) はてなブックマーク数

仕様的には、lookupDictionary.js と似ている。(というか中身もぱくってる!)
実際にはこんな感じで表示される。

20081119_1.jpg

大体の使い方はプラグインのコメントに書いてるけれど、 ここでも説明しておく。
(これ読んで使おうと思う人は、ここでの説明はあんまりいらない気もするが)

SITEINFO

リクエストする URL は以下で拡張可能(優先順位高い順)

ex.) .vimperatorrc

javascript <<EOM
liberator.globalVariables.multi_requester_siteinfo = [
{
map:           ',me',                          // optional: keymap for this siteinfo call
bang:          true,                           // optional:
args:          'any'                           // optional:
name:          'ex',                           // required: subcommand name
description:   'example',                      // required: commandline short help
url:           'http://example.com/?%s',       // required: %s <-- replace string
xpath:         '//*',                          // optional: default all
srcEncode:     'SHIFT_JIS',                    // optional: default UTF-8
urlEncode:     'SHIFT_JIS',                    // optional: default srcEncode
ignoreTags:    'img',                          // optional: default script, syntax 'tag1,tag2,……'
extractLink:   '//xpath'                       // optional: extract permalink
},
];
EOM

追記 2008/12/02 23:53 map, bang, args, extractLink追加

主な lookupDictionary.js と異なる点は、name の値がコマンドとはならないところ。
複数のリクエストを拡張する為に、サブコマンドとなっている。

Usage

実際のコマンドはデフォルトは :mr

:mr ex INPUT_KEYWORD

とすることで、%sINPUT_KEYWORD で置換されてリクエストされる。
追記 2008/11/20 03:00: テキストを選択状態で引数がない場合は、選択テキストで置換して実行するようにした。

:mr! ex INPUT_KEYWORD

とすると、結果が新しいタブに表示され、

:mr! ex -s

と -s オプションをつけることで、選択された文字列で実行される。
追記 2008/11/20 03:00: テキストを選択していて、引数がなければ自動で実行するようにした。
メインコマンドの :mr が気に入らない場合は、

let g:multi_requester_command = "ANY1, ANY2, ……";
or
liberator.globalVariables.multi_requester_command = [ANY1, ANY2, ……];

で上書き可能。

Mappings

上記まででもだいぶタイピングの量は減るのだけれど、もっと簡略化する為のキーマッピングも設定可能。

liberator.globalVariables.multi_requester_mappings = [
[',ml', 'ex'],                     // <-- :mr ex
[',ma', 'alc',    , 'arg'],        // <-- :mr alc arg
[',mg', 'goo', '!', 'arg'],        // <-- :mr! goo
];

設定内容は見たまんま。

自分でキーマップするのとの違いは、文字列が選択状態か arg が設定されている場合はすぐにリクエストが実行され、それ以外は入力待ちになるところ。
なので、この例の場合、何か文字列を選択した状態で ,mg とキーを打つと、即座に goo辞書 で検索結果が新しいタブに表示される。

Options

let g:multi_requester_use_wedata = “false” // true by default
wedata 利用制御フラグ。

追記 2008/11/20 01:50: 2.0pre バージョンを anekos さんが commit してくれた。
追記 2008/12/12 02:20: _libly.js が必要となってます。

Links

- CodeRepos::Share Trac – _libty.js (共通ライブラリ) はてなブックマーク数
- CodeRepos::Share – Trac – multi_requester.js (for vimperator ver. 1.2) はてなブックマーク数
- CodeRepos::Share – Trac – multi_requester.js (for vimperator ver. 2.0pre) はてなブックマーク数
- アイテム – データベース: Multi Requester – wedata はてなブックマーク数
- Web辞書を引いて結果をバッファウィンドウに出力するvimperatorプラグイン – hogehoge はてなブックマーク数
- suVeneのあれ: [vimperator]multi_requester.js で天気予報をみる!(extractLink) はてなブックマーク数



Programming

[vimperator]direct_bookmark.js で post 後にメッセージを出す

2008 年 11 月 10 日

vimperator を今更ながら導入して、すっごく便利!と驚いているところ。

で、plugin の direct_bookmark はお勧め plugin の一つなのだが、ポストが終わったのかどうなのかよくわからないので、post が完了したらメッセージを出力するように patch.

=== direct_bookmark.js
==================================================================
--- direct_bookmark.js	(revision 34)
+++ direct_bookmark.js	(local)
@@ -625,7 +625,9 @@
user,password,
isNormalize ? getNormalizedPermalink(url) : url,title,
comment,tags
-                ));
+                )).next(function() {
+                  liberator.echo("[" + services[service].description + "] post completed.");
+                });
});
d.error(function(e){liberator.echoerr("direct_bookmark.js: Exception throwed! " + e);liberator.log(e);});
setTimeout(function(){first.call();},0);

Deferred の使い方はこれで、あってんのかな?

追記 2008/11/22 02:30

修正あるたびにパッチ宛てるのも面倒なので、coderepos に commit した。

ref.

- CodeRepos::Share – Trac – direct_bookmark.js はてなブックマーク数
- はてなブックマーク – suVeneのSBM / vimperator


Programming

他のOOPをやったことある人がPerlをはじめるときにお勧めの本(やさしめ)

2008 年 11 月 5 日

Perl をはじめて触ったのは、7~8年前で Perl4 の頃だった。(ような気がする)
その頃は、CGI の掲示板やチャット、カウンターなどが全盛で、Object指向 で作られたものはほとんどなく、ライブラリを共通関数郡のような感じで纏めてあるのを、静的にコールして使うようなのが主流だった。(たぶん)

それからは、たまに小さなプログラムを Perl で書いたりするものの、ちゃんとしたサービスなどを作ることもなく現在にいたる。読むことはできるが、ソラで Perl を利用して効率よいプログラムを書くことはできない。そんな感じ。

で、最近何故か Perl を学びたくなって、よい本はないかなぁと模索。

俗に言われる、らくだ本 がよいのかなぁ?と思い、近くの本屋にいくも、見つからず。
代わりに、以下の本を買ってきた。

すぐわかる オブジェクト指向 Perl
すぐわかる オブジェクト指向 Perl 深沢 千尋

技術評論社 2008-06-20
売り上げランキング : 24902

おすすめ平均 star
starWEBの海での救命道具のような本
starマスターコースを読む前に

Amazonで詳しく見る by G-Tools

この本は、「オブジェクト指向」とタイトルに含まれつつも、最初の方はスカラ変数($)、配列(@)、ハッシュ(%)、サブルーチン(&)、及びそれぞれのリファレンス(参照)の説明に費やし、その後にライブラリを使った小さなサンプルを継続的に拡張しつつ、ライブラリ化したりモジュール化したりしながら、最終的にクラス・インスタンス・継承など作成・説明をし、最後に CPAN・モジュールを利用した簡単な CGI プログラミングという、段階をおった構成になっている。
「オブジェクト指向とは何たるか」という説明はほとんどなく、というか、逆にないので Perl の理解に頭を使えてよい感じ。(まぁ、もともとやさしい内容を詳しく説明してくれてんだけど)

今までなんとなくしか知らなかった、レキシカル変数(my) や our の説明。map や sort の使い方。色々な Syntax などを順を追って説明してくれるので、概念の理解がしやすい。

この本のよいところは、「構文はこうです。使い方はこうです。」というような感じで、いきなり答えを書くのではなく、まずは冗長なプログラムを書きつつ、動作などを理解したうえで、「実はこう表現できます」という説明があって、中身まで理解しやすい構成であること。そして、その説明の中に少しだけ難しい書き方がしてあって、今度はその部分をじっくり説明をしてくれてること。

なんだか、文章にすると意味わかんないが、いわゆる受験勉強にありがちな「公式だけを覚えてひたすら使い方を繰り返す」みたいな面白みのない苦痛な作業のような感じではなく、楽しく読みすすめられる感じ。

まぁ、後はどんどんいろんなモジュールを読んだり書いたりしていくのが、手っ取り早い方法なんだろうけど、
「他の OOP 言語はある程度理解してるけど、Perl はいまいち」
って人のいっちばん最初の取っ掛かりには、とてもよい本だと思いました!

いずれはらくだ本も読みこなしたい。

「すぐわかる オブジェクト指向 Perl」の目次

- 第1章 いきなりモジュールを使ってみる
- 1-1 本書のあらすじ
- 1-2 File::Find モジュールを使ってみよう
- 第2章 「参照」は小粒でピリリと辛い ~スカラー リファレンス~
- 2-1 リファレンスとは何か
- 2-2 リファレンスのデリファレンス
- 2-3 デバッガーを使ったプログラムのステップ実行
- 2-4 名もないスカラー~無名スカラーリファレンス~
- 第3章 配列のリファレンス
- 3-1 配列のリファレンス
- 3-2 配列要素へのアクセスと矢印記法
- 3-3 2次元配列
- 3-4 シンタックス シュガーが利かない場合
- 3-5 無名配列
- 第4章 ハッシュのリファレンス
- 4-1 ハッシュの復習
- 4-2 ハッシュ リファレンス
- 4-3 無名ハッシュ
- 4-4 2次元ハッシュ
- 第5章 サブルーチンのリファレンス
- 5-1 サブルーチンの復習
- 5-2 サブルーチンのリファレンス
- 5-3 無名サブルーチン
- 5-4 サブルーチン リファレンスの応用
- 第6章 ライブラリを取り込む require
- 6-1 サブルーチン ライブラリの作成
- 6-2 ライブラリの格納場所と配列変数 @INC
- 第7章 名前空間を作る package
- 7-1 パッケージとは何か
- 7-2 package とライブラリ
- 7-3 パッケージ変数、my 変数、 そして our 変数
- 第8章 モジュールを使う use
- 8-1 モジュールと use
- 8-2 import による名前の輸入
- 第9章 オブジェクト指向モジュールの活用
- 9-1 オブジェクト指向と Perl
- 9-2 CPAN の活用
- 第10章 静的クラスの作成
- 10-1 クラスとメソッド
- 10-2 クラスの継承
- 10-3 現状での到達点
- 第11章 オブジェクトクラスの作成
- 11-1 オブジェクトとは
- 11-2 オブジェクト クラスの作成
- 11-3 オブジェクト クラスの増強
- 第12章 演算子のオーバーロード
- 12-1 オーバーロードとは
- 12-2 変換演算子のオーバーロード
- 12-3 四則演算子のオーバーロード
- 12-4 特殊演算子 nomethod
- 第13章 オブジェクトクラスの継承、デストラクタ、永続化
- 13-1 オブジェクト クラスの継承
- 13-2 デストラクタ
- 13-3 オブジェクトの永続化
- 13-4 コンポジション
- 13-5 CPAN モジュール / コアモジュールの継承
- 第14章 オブジェクト指向 モジュールを使った CGI
- 14-1 CGI.pm を使おう
- 14-2 レンタル サーバーへの CPAN モジュールのインストール
- 14-3 ユーザー入力の実装
- 付録

その他書籍

- プログラミングPerl〈VOLUME1〉
- プログラミングPerl〈VOLUME2〉



Programming ,