2009年8月21日金曜日

2本指ポケットは人差し指でも薬指でも持てるようにするべき

2本指ポケットは人差し指・中指と中指・薬指のどちらでも持てるようにしたほうがいい、とジムでときどき会う強い人から言われた。自分は人差し指・中指派なのだけど、周りを見ていると中指・薬指派のほうが多いような気がする。トップクライマーも中指・薬指が多いようだ。その一方で、フリークライミング (ヤマケイ・テクニカルブック 登山技術全書)には、薬指は弱い指で痛めやすいため、なるべく人差し指を使うようにと書いてある。

総合的にどちらがいいのかはわからないけど、ポケットの向きや次のホールドの位置によって、人差し指・中指のほうが次の一手を出しやすい場合もあるし、中指・薬指のほうがいい場合もある。実際に、その人はジムの課題に打ち込んでいるとき、その課題ではどちらで保持するべきか検証していた。

ということで、数ヶ月前から中指・薬指も鍛えているのだけど、人差し指・中指と同じレベルまで持っていくのはかなり難しい。だいぶ強くなってきてはいるのだけど、自分の限界グレードの課題をやっているときはどうしても慣れているほうを使ってしまうので、易しめのポケット課題で鍛えるしかない。ついサボりがちになってしまうのだけど、引き続きちょっとずつでもやっていこうと思う。

(追記)2本指ポケットで普段使わないほうの指を鍛えるのは、ポケット以外のホールドでも大いに役に立つはず。特に自分は3本でのオープンハンドを多用するため、薬指がきっちり仕事をしてくれないと全体での保持力がかなり弱くなってしまう。

(追記)数年程でどちらも同じように使えるようになった。

2009年8月12日水曜日

w3m Tips

自分が利用しているw3mのTipsをまとめてみた。

Googleの検索結果を直接表示する

w3mにはローカルCGIというHTTPサーバーなしでCGIを動かす機能が備わっている。CGIの中からw3mのコマンドを実行することができるため、w3mの機能を拡張することができる。

ここでは、Uを押して、URLの代わりに

g:クライミング

と入力してGoogleで「クライミング」を検索できるようにしてみる。実はそのためのCGIスクリプトはすでにw3mのソースに含まれている。Bonusディレクトリにあるgoogle.cgiがそれなので、ローカルCGIとして実行できるようにするため/usr/lib/w3m/cgi-bin/(Ubuntuの場合)にコピーする。

% sudo cp w3m-0.5.2/Bonus/google.cgi /usr/lib/w3m/cgi-bin/

このままだとUTF-8環境では文字化けしてしまうので、クエリー文字列のエンコーディングの部分を変更する。

--- -   2009-08-12 16:49:36.610243896 +0900
+++ /usr/lib/w3m/cgi-bin/google.cgi     2009-08-12 16:13:41.000000000 +0900
@@ -14 +14 @@
-       $url .= "search?q=$_&hl=ja&lr=lang_ja&ie=EUC-JP";
+       $url .= "search?q=$_&hl=ja&lr=lang_ja&ie=UTF-8";

この時点で、URLに

file:///$LIB/google.cgi?クライミング

と入力すればGoogleで「クライミング」の検索結果が表示される。

次に~/.w3m/urimethodmapに下記を追加。

g:      file:///$LIB/google.cgi?%s
google: file:///$LIB/google.cgi?%s

$LIBは上述した/usr/lib/w3m/cgi-bin/に置き換えられる。%sにはg:のあとに続く文字列が入る。これで

g:クライミング

が動くようになった。

辞書検索

w3mではESC-wで入力した単語の辞書検索、ESC-Wでカーソル位置の単語の辞書検索ができる。ただし、辞書引き用のコマンドは自分で用意しないとならない。ここでは英辞朗 on the WEBの検索結果へ移動するようにしてみる。

まずは/usr/lib/w3m/cgi-bin/w3mdict.cgiというファイルを作り、

#!/bin/sh
cat <<EOF
w3m-control: GOTO http://eow.alc.co.jp/$QUERY_STRING/UTF-8/
w3m-control: DELETE_PREVBUF
EOF

実行権限を付ける。

% chmod +x /usr/lib/w3m/cgi-bin/w3mdict.cgi

次はw3mの設定画面を表示し、辞書引きをCGI経由でおこなうYESにする。これだけで完了。ちなみに、ESC-Wでカーソル位置の単語を検索する場合は英単語しか検索できないようだ。

自動ベーシック認証

~/.w3m/passwdに次の内容を追加する。

machine ホスト名
port ポート番号
realm "Username for ***"の"***"の部分
path ローカルパート
login ユーザー名
passwd パスワード

portpathは省略可能。realmには、対象のWebページにアクセスしたときに表示されるUsername for ******の部分を指定する。ファイルのパーミッションは600にする必要がある。

% chmod 600 ~/.w3m/passwd

「ttp://」を「http://」と解釈する

~/.w3m/urimethodmapに追加。

ttp:    h%s
tp:     ht%s

:とあわせて使うと便利だけど、リンク先に移動してもURLは「ttp://...」のままなので、そのページからさらに相対リンクで移動することはできない。そのときはUを押し、先頭にhを追加して読み直す必要がある。

GNU Screenと連携してコピー&ペースト

w3mのオプションで外部ブラウザ

screen -X register .

を設定しておくと、Mで現在表示しているページのURL、ESC-MでリンクのURLがScreenのレジスタにコピーされる。ペーストはいつも通り^A]でできる。

詳しくは元ネタであるScreenを使う (Linux Japan 2002年1月号掲載記事原稿)を参照。ありがたいことに原稿と掲載記事のPDFが公開されている。

その他

C/Migemoのインストール、設定についてはMigemo(C/Migemo)のインストールにまとめてある。UTF-8環境で表示が乱れる問題については、何も解決しなかったけどUTF-8環境と曖昧な文字幅を参照。

2009年8月3日月曜日

autoreleaseされたオブジェクトが解放されるタイミング

autoreleaseを使いすぎるとNSAutoreleasePoolに解放待ちのオブジェクトがたまってメモリを圧迫してしまう。と、思っていてinit/releaseを使うようにしていたのだけど、Application KitやUIKitの場合はそうではないようだ。

クラスリファレンスによると、メインスレッドでイベントループの最初にNSAutoreleasePoolが作られ、イベントループの最後にreleaseが送られるということらしい。つまり、イベントループが一周するごとにautoreleaseされたオブジェクトは解放されることになる。XCodeのテンプレートでは、main()の最初にNSAutoreleasePoolを作り最後にreleaseしていたので、autoreleaseされたオブジェクトはプログラムの終了時まで解放されないと勘違いしていた。

ということで、作ったオブジェクトをautoreleaseしたり、autoreleaseされたオブジェクトを返すメソッドを呼んだりしても、メモリについてはそんなに気にしなくていい。ただし、ループなどでautoreleaseされたテンポラリオブジェクトが大量に作られる場合は、自分でNSAutoreleasePoolを用意し解放するようにしたほうがいい。

while (/* ... */) {
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
    
    /* autoreleaseされたテンポラリオブジェクトを大量に作る */
    
    [pool release]
}

参考