2009年12月29日火曜日

EINいらなくなってた

iTunes Connectがクリスマスで休止中になっていたので、休日明けの今日になって有料アプリ販売のための手続きを行った。Bank InfoやTax Infoを記入し、そのまま指示に従って進めると、EINの記入を求められることなく終了してしまった。本来ならこの後W-8BENを提出するはずだったのだけど。

検索してみるとだいぶ前に変更されたらしく、もはやEINもW-8BENの提出も必要ないらしい。

先のことを見越してEINを取得したのだけど、もうちょっと待てばよかった。さらに、自分は引っ越しをしたためForm 8822(Change of Address)も記入して郵送してしまった。

2009年12月23日水曜日

iPhone Developer Programを購入したけどアクティベーションに失敗した

開発していたiPhoneアプリが形になってきたので、実機で動かそうということでiPhone Developer Programを購入した。アカウントの登録情報をすべて英語に変更しておいたためか、支払いまでは特に問題なく行えたが、案の定アクティベーションで失敗した。

We are unable to activate your iPhone Developer Program membership because we are unable to successfully verify your identity. Please contact us and reference Enrollment ID# ********** for further assistance.

というエラーメッセージが表示されたので、Contact usのリンクからこのエラーメッセージをコピペして送信(他には何も書いていない)。

その後のアップルの対応は意外にも早く、1時間程度で日本語のメールが送られてきた。請求先と連絡先、注文番号を知らせてほしいとのことなので、返信するとさらに1時間ぐらいでアカウント情報を調整したとのメールが送られてきた。そして、もう一度メールに書かれていたリンクからアクティベーションを試みると今度は無事成功。

結論

アップルの対応は意外に早いので、アカウント情報云々は気にせず、とりあえず

  1. 購入
  2. アクティベーション失敗
  3. Contact us

の手順を踏んで、あとは中の人にやってもらうのが一番早い。

2009年11月21日土曜日

インサイドフラッギング補足

インサイドフラッギングを使っている人が周りにいなかったため、教えてもらうこともできず本で調べるしかなかったのだけど、おおむねムーブについては理解できたと思う(詳しくはインサイドフラッギング再考を参照)。最近はまったく意識せずに勝手にインサイドフラッギングが出るようになってきた。

先日ふと気がついたのだけど、今保持しているホールドが悪すぎて、なるべく早く次のホールドを取らないと消耗してしまうような状況でも有効だと思った。次のホールドがある程度いいのが前提なのだけど、そういう状況ではそもそも時間のかかる足の踏み替えなんかやっている場合ではなくて、できる限り短時間でバランスを作り、次の手を出さなければならない。ちょっとしたことだけど、こういった場合にもインサイドフラッギングは有効。

(追記)悪いスローパーをマッチするのに、踏み替えではどうやってもできなかったのだけど、インサイドフラッギングを使ったらできたということがあった。インサイドフラッギングをした状態では、効く方向にスローパーを引っ張ることができたため。しかしその後、解除ができず、インサイドフラッギングのままランジをするという荒技を余儀なくされた。なお、その課題はかろうじて登れた。

(追記)手足のホールドが垂直方向には近く、しかし水平方向には遠く、通常ならアウトサイドフラッギングでクロスする状況だけど、インサイドフラッギングでしかできなかったことがあった。この状況でアウトサイドフラッギングをすると、体がより水平に近づきクロスで取りに行く次のホールドから遠ざかってしまう。一方、踏んでいる足の甲の上に、流す方の足の太ももを載せるようにインサイドフラッギングをしたら、体は起こし気味のまま次の手を出すことができた。なお、その課題はわりとすぐ登れた。また、このテクニックはSDスタートで初手が遠いクロスというような課題でも有効な場合がある。

(追記)つま先ではなく、膝を壁に押し付けるインサイドフラッギングがある。膝を曲げて壁に当てたら、つま先は踏んでいる側の足に引っ掛けるようにする。自分はボルダリングのスタート以外で使ったことはない。メリットは解除が短時間でできることだと思われる。

2009年11月7日土曜日

斬新なフィンガーボードの設置方法

フィンガーボードはクライミングのトレーニングに有用だけど、賃貸だと設置ができないという話をよく聞く(自分もだけど)。ところが、マーブーのお知らせブログを眺めていたら斬新なフィンガーボードの設置方法が紹介されていた。

ドアの上枠の強度は大丈夫なんだろうか?

2009年10月24日土曜日

Ubuntu 8.04でopenChromeをインストールした

HP 2133で使っているVIAのビデオドライバがアップデートされないので、なんとなくopenChromeをインストールしてみた。openChromeはVIAのグラフィックチップセットであるUniChrome, UniChrome Pro, Chrome9に対応しているフリーでオープンなビデオドライバ。

Ubuntu 8.04以降では、xserver-xorg-video-openchromeというパッケージが用意されているので

% sudo apt-get install xserver-xorg-video-openchrome

とするだけでインストールできる。

でも例によってパッケージのバージョンは古いので、ソースから最新版をインストールすることにした。ダウンロードしたtarballを展開後、

% ./configure --prefix=/usr
% make
% sudo make install

とすればインストールは完了。

次に/etc/X11/xorg.confをエディタで開いて、DeviceセクションにあるDriverの値をopenchromeに変更し、Xを再起動する。

--- /etc/X11/xorg.conf~ 2009-01-08 20:35:24.000000000 +0900
+++ /etc/X11/xorg.conf  2009-10-17 18:27:13.000000000 +0900
@@ -141,7 +141,7 @@

 Section "Device"
   BoardName    "Framebuffer Graphics"
-  Driver       "via"
+  Driver       "openchrome"
   Identifier   "Device[0]"
   Screen       0
   VendorName   "VIA Technolog

実際に使用してみて、特に描画が速くなったりということはなかったのだけど、サスペンド/ハイバネーションの復帰で失敗することがなくなったので、とりあえずopenChromeを使い続けていこうと思う。

ちなみに、openChromeでは3Dアクセラレーションは無効になるけど、代わりにいろいろな問題が解消されたりフリーズしなくなったりするとのこと。3DアクセラレーションはVIAが情報を公開してくれないため実装できないらしい。

参考

2009年10月15日木曜日

Ubuntu 8.04でPulseAudioを削除したら動画の再生が軽くなった

動画の再生が重いのは、いろいろ調べてみてPulseAudioが原因だということがわかった。PulseAudioは8.04から標準になったサウンドシステムなのだけど、これを削除して直接ALSAを使うことにした。

% dpkg -l "*pulseaudio*"

で表示されるインストール済みパッケージをすべて削除する。

% sudo apt-get purge pulseaudio pulseaudio-esound-compat pulseaudio-module-gconf pulseaudio-module-hal pulseaudio-module-x11 pulseaudio-utils gstreamer0.10-pulseaudio

次に、[システム]-[設定]-[サウンド]ですべてALSA - Advanced Linux Sound Architectureを選択し再起動する。

PulseAudioを消すとログイン音が鳴らなくなるらしいのだけど、自分は効果音の類はすべて無効にしているので関係ない。

実際に削除してみて、劇的に軽くなったというわけではないのだけど、かなりよくなった気がする。

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]
}

参考

2009年7月24日金曜日

emacs-w3mのキーバインディングをw3mっぽくしたい

w3mを昔から使ってきたため、emacs-w3m独特のキーバインディングにどうしても馴染めず、自分はemacs-w3mをw3mっぽく設定して使っている。

といっても、中身はemacs-w3mのメーリングリストにあったものを少し変えただけ。

このキーバインディングのおかげでemacs-w3mを快適に使えるようになった。

;;
;; http://emacs-w3m.namazu.org/ml/msg05447.html
;;
(define-key w3m-mode-map "\C-@" 'set-mark-command) ; MARK
;;  (define-key w3m-mode-map "\C-a" 'beginning-of-line)
;;  (define-key w3m-mode-map "\C-b" 'backward-char)
;;  (define-key w3m-mode-map "\C-e" 'end-of-line)
;;  (define-key w3m-mode-map "\C-f" 'forward-char)
;;  (define-key w3m-mode-map "\C-g" 'what-line) ; LINE_INFO
(define-key w3m-mode-map "\C-h" 'w3m-db-history)
(define-key w3m-mode-map "\t" 'w3m-next-anchor)
(define-key w3m-mode-map "\C-j" 'w3m-view-this-url)
(define-key w3m-mode-map "\C-k" 'w3m-cookie)
;;  (define-key w3m-mode-map "\C-l" 'recenter)
(define-key w3m-mode-map "\C-m" 'w3m-view-this-url)
;;  (define-key w3m-mode-map "\C-n" 'next-line)
;;  (define-key w3m-mode-map "\C-p" 'previous-line)
;;  (define-key w3m-mode-map "\C-r" 'isearch-backward)
;;  (define-key w3m-mode-map "\C-s" 'isearch-forward)
(define-key w3m-mode-map "\C-u" 'w3m-previous-anchor)
;;  (define-key w3m-mode-map "\C-v" 'scroll-up)
;;  (define-key w3m-mode-map "\C-w" 'undefined)      ; WRAP_TOGGLE
(define-key w3m-mode-map "\C-z" 'w3m-close-window)

(define-key w3m-mode-map " " 'w3m-scroll-up-or-next-url)
(define-key w3m-mode-map "!" 'shell-command)
;;  (define-key w3m-mode-map "\"" 'undefined)        ; REG_MARK
;;  (define-key w3m-mode-map "#" 'undefined)         ; PIPE_SHELL
(define-key w3m-mode-map "$" 'end-of-line)
(define-key w3m-mode-map "," (lambda () (interactive) (w3m-scroll-right 1)))
(define-key w3m-mode-map "." (lambda () (interactive) (w3m-scroll-left 1)))
(define-key w3m-mode-map "/" 're-search-forward) ; SEARCH
;;  (define-key w3m-mode-map ":" 'undefined)         ; MARK_URL
;;  (define-key w3m-mode-map ";" 'undefined)         ; MARK_WORD
(define-key w3m-mode-map "<" 'w3m-scroll-right)
(define-key w3m-mode-map "=" 'w3m-view-header)
(define-key w3m-mode-map ">" 'w3m-scroll-left)
(define-key w3m-mode-map "?" 're-search-backward) ; SEARCH_BACK
;;  (define-key w3m-mode-map "@" 'undefined)         ; READ_SHELL
(define-key w3m-mode-map "B" 'w3m-view-previous-page)
(define-key w3m-mode-map "E" 'w3m-edit-this-url)
;;  (define-key w3m-mode-map "F" 'undefined)         ; FRAME
(define-key w3m-mode-map "G" 'end-of-buffer)
(define-key w3m-mode-map "H" 'describe-mode)
(define-key w3m-mode-map "I" 'w3m-view-image)
(define-key w3m-mode-map "J" (lambda () (interactive) (scroll-up 1)))
(define-key w3m-mode-map "K" (lambda () (interactive) (scroll-down 1)))
(define-key w3m-mode-map "M" 'w3m-view-url-with-external-browser)
(define-key w3m-mode-map "N" 're-search-backward) ; SEARCH_PREV
(define-key w3m-mode-map "Q" 'w3m-quit)
(define-key w3m-mode-map "R" 'w3m-reload-this-page)
;;  (define-key w3m-mode-map "S" 'undefined)         ; SAVE_SCREEN
(define-key w3m-mode-map "U" 'w3m-goto-url)
(define-key w3m-mode-map "V" 'w3m-find-file)
(define-key w3m-mode-map "W" 'backward-word)
(define-key w3m-mode-map "Z" 'w3m-horizontal-recenter)
(define-key w3m-mode-map "[" '(lambda () (interactive) (beginning-of-buffer)
                                (w3m-next-anchor)))
(define-key w3m-mode-map "]" '(lambda () (interactive) (end-of-buffer)
                                (w3m-previous-anchor)))
(define-key w3m-mode-map "^" '(lambda () (interactive) (beginning-of-buffer)
                                (w3m-next-anchor)))
(define-key w3m-mode-map "a" 'w3m-download-this-url)
(define-key w3m-mode-map "b" 'w3m-scroll-down-or-previous-url)
(define-key w3m-mode-map "c" 'w3m-print-current-url)
(define-key w3m-mode-map "g" 'beginning-of-buffer)
(define-key w3m-mode-map "h" 'backward-char)
;;  (define-key w3m-mode-map "i" 'undefined)         ; PEEK_IMG
(define-key w3m-mode-map "j" 'next-line)
(define-key w3m-mode-map "k" 'previous-line)
(define-key w3m-mode-map "l" 'forward-char)
(define-key w3m-mode-map "n" 're-search-forward) ; SEARCH_NEXT
(define-key w3m-mode-map "o" '(lambda () (interactive) (customize-group 'w3m)))
(define-key w3m-mode-map "q" 'w3m-close-window)
(define-key w3m-mode-map "s" 'w3m-switch-buffer)
(define-key w3m-mode-map "u" 'w3m-print-this-url)
(define-key w3m-mode-map "s" 'w3m-db-history)
(define-key w3m-mode-map "v" 'w3m-view-source)
(define-key w3m-mode-map "w" 'forward-word)
(define-key w3m-mode-map "z" 'recenter)

(define-key w3m-mode-map "\M-\t" 'w3m-previous-anchor)
(define-key w3m-mode-map "\C-\M-j" 'w3m-download-this-url)
(define-key w3m-mode-map "\C-\M-m" 'w3m-download-this-url)

;;  (define-key w3m-mode-map "\M-:" 'undefined)      ; MARK_MID
;;  (define-key w3m-mode-map "\M-<" 'beginning-of-buffer)
;;  (define-key w3m-mode-map "\M->" 'end-of-buffer)
(define-key w3m-mode-map "\M-I" 'w3m-save-image)
;;  (define-key w3m-mode-map "\M-M" 'undefined)      ; EXTERN_LINK
;;  (define-key w3m-mode-map "\M-W" 'undefined)      ; DICT_WORD_AT
(define-key w3m-mode-map "\M-a" 'w3m-bookmark-add-current-url)
(define-key w3m-mode-map "\M-b" 'w3m-bookmark-view)
;;  (define-key w3m-mode-map "\M-e" 'undefined)      ; EDIT_SCREEN
(define-key w3m-mode-map "\M-g" 'goto-line)
;;  (define-key w3m-mode-map "\M-n" 'undefined)      ; NEXT_MARK
;;  (define-key w3m-mode-map "\M-p" 'undefined)      ; PREV_MARK
;;  (define-key w3m-mode-map "\M-s" 'undefined)      ; SAVE
(define-key w3m-mode-map "\M-u" 'w3m-goto-url) ; GOTO_RELATIVE
(define-key w3m-mode-map "\M-v" 'scroll-down)
;;  (define-key w3m-mode-map "\M-w" 'undefined)      ; DICT_WORD

(define-key w3m-mode-map [up] 'previous-line)
(define-key w3m-mode-map [down] 'next-line)
(define-key w3m-mode-map [right] 'forward-char)
(define-key w3m-mode-map [left] 'backward-char)

(define-key w3m-mode-map [home] 'beginning-of-buffer)
;;  (define-key w3m-mode-map [insertchar] 'undefined) ; MENU
(define-key w3m-mode-map [end] 'end-of-buffer)
(define-key w3m-mode-map [prior] 'scroll-up)
(define-key w3m-mode-map [next] 'scroll-down)

;;
;; http://emacs-w3m.namazu.org/ml/msg05444.html
;;
(define-key w3m-mode-map [up] 'previous-line)
(define-key w3m-mode-map [down] 'next-line)
(define-key w3m-mode-map [right] 'forward-char)
(define-key w3m-mode-map [left] 'backward-char)
(define-key w3m-mode-map "H" 'describe-mode)
(define-key w3m-mode-map "w" 'forward-word)
(define-key w3m-mode-map "W" 'backward-word)
(define-key w3m-mode-map "z" 'recenter)
(define-key w3m-mode-map "Z" 'w3m-horizontal-recenter)
(define-key w3m-mode-map "\C-t" 'w3m-view-this-url-new-session)
(require 'vi)
(define-key w3m-mode-map "/" 'vi-search-forward)
(define-key w3m-mode-map "?"  'vi-search-backward)
(define-key w3m-mode-map "n" 'vi-repeat-last-search)
(define-key w3m-mode-map "N" 'vi-reverse-last-search)

2009年6月30日火曜日

Ubuntuであらゆるビープ音を二度と鳴らさない方法

カーネルからpcspkrモジュールをアンロードすれば、すべてのビープ音を止めることができる。

$ sudo rmmod pcspkr

ただし、これだとOSの再起動後にはまた鳴るようになってしまう。再起動後にも無効にするためには、/etc/modprobe.d/blacklistblacklist pcspkrという1行を追加すればいい。

% sudo su -
# echo "blacklist pcspkr" >> /etc/modprobe.d/blacklist

ちなみに、ターミナルから発生するビープ音だけを消す場合は

% setterm -blength 0

のようにすればできる。次にシェルを起動するときにも有効にするためには

% echo "setterm -blength 0" >> ~/.bashrc

のようにして、.bashrcなどに上記の1行を足しておけばいい。

また、.inputrcset bell-style noneと書いておくのは、readlineを使用しているコマンドでしか効かないため(.inputrcはreadlineの設定ファイル)あまり意味がないと思う。

2009年6月27日土曜日

デッドハングによる指のトレーニング

クライミングのトレーニングとして少し前からはじめた片手ロックオフの効果がすでに出てきている気がする(詳しくは片手ロックオフ参照)。筋動員率を高めるアイソメトリックトレーニングは、最初は短期間で効果が出るらしいのだけど、本当にそのとおりになったと思う。

ということで、これに気をよくして指の強化にもアイソメトリックトレーニングを取り入れてみようと思う。

  • アイソメトリックトレーニングは筋肉の長さを変えないで負荷をかけるトレーニングで、筋肥大よりも神経系に働きかけて筋動員率を高める効果が高い。
  • 指の場合はフィンガーボードロックリングスなどにぶら下がって、限界まで保持し続けるデッドハングで行う。
  • ウェイトを身につけて加重したり、椅子に足を乗せて減重するなどして10秒程度で限界に達するように負荷を設定し、これを数セット行う。
  • 角度依存があるので様々な角度で行う必要がある。 フリークライミング (ヤマケイ・テクニカルブック 登山技術全書)によると4本指ハーフクリンプと3本指オープンクリンプを優先させるといいとのこと。クリンプ(カチ持ち)だと故障の原因になりやすいため。クリンプはやらなくていいということではない。

指を集中的に鍛えるので、トレーニング後はきっちりアイシングをするようにしたい。

2009年6月24日水曜日

EINを郵送で取得した

(追記)現在ではiPhoneアプリの販売にEINは必要ない。

iPhoneアプリの販売に備えてEINを郵送で取得した。今の段階では本当に販売するところまで辿り着けるかわからないけど、郵送だと時間がかかるということだったので、念のため早めに書類を提出しておいた。

iPhoneアプリをAppStoreを通じて販売すると、アメリカで所得が発生したことになり、おのずとアメリカの所得税が課税され、源泉徴収もアメリカでされてしまうようだ。日本でも課税されるので二重課税になってしまう。W-8BENという書類を提出することで、アメリカでは源泉徴収しないように申請することができる。日本の開発者はその書類にEIN(Employer Identification Number)を記入することになるので、アメリカの国税庁(IRS)にSS-4という書類を提出してEINを取得する必要がある(EINはいらないという情報もあるのだけど真偽のほどは不明)。

日本からのEINの取得方法は電話、FAX、郵送の三つの方法がある。電話は英語での会話がつらいのでパス。FAXはコンビニから送ろうとしたのだけどなぜかエラー(海外対応しているのに)。ということで、仕方なく4 weeksかかると書いてある郵送で提出することに。

SS-4は編集可能なPDFがダウンロードできるので、記入してから印刷、手書きでサインをして送ることになる。SS-4の記入の仕方については次のページを全面的に参考にさせてもらった。

郵便局に直接持っていき、お金を払って(よく覚えてないのだけど200円はしなかったと思う)あとはただ待つのみ。4週間かかるつもりでいたら2週間程度でエアメールが届き、EINを無事取得することができた。

2009年6月5日金曜日

ImageMagickでスクリーンショット

ImageMagickに含まれているimportコマンドで、特定のウィンドウや、デスクトップの指定範囲のスクリーンショットを簡単に撮ることができる。

% import screenshot.png

のようにするとマウスカーソルの形が変わり、目的のウィンドウをクリックすれば、そのウィンドウのスクリーンショットがscreenshot.pngに保存される。ウィンドウの枠も含めるには-frameオプションを使う。また、クリックではなくドラッグで範囲を選択した場合はその部分が保存される。

他にもオプションを組み合わせることでいろいろできる。

デスクトップ全体のスクリーンショットを撮る。

% import -window root screenshot.png

デスクトップの左上512x256ピクセルのスクリーンショットを撮る。

% import -window root -crop 512x256-0+0 screenshot.png

3秒後にスクリーンショットを撮る。

% import -pause 3 screenshot.png

3回続けてスクリーンショットを撮る。それぞれscreenshot-0.pngscreenshot-1.pngscreenshot-2.pngという名前で保存される。

% import -snaps 3 screenshot.png

ウィンドウの指定は、-windowオプションにウィンドウIDを渡すことでもできる。ウィンドウIDを調べるにはxwininfoを使えばいい。実行するとマウスカーソルの形が変わるので、目的のウィンドウをクリックすればウィンドウIDを含む様々な情報が表示される。

マウスで選択したウィンドウのスクリーンショットを1秒間隔で10回連続撮る。

% import -window `xwininfo | grep -oP '(?<=Window id: )\S+'` -snaps 10 -pause 1 screenshot.png

参考

2009年5月31日日曜日

片手ロックオフ

ジム以外でのトレーニングに、片手ロックオフをやるといいと強い人に言われた。

片手ロックオフ

両手で普通に懸垂をして、一番上で片手を離してできる限り長く保持する。あごは上に出す。このように筋肉の長さを変えずに負荷に耐え続けることをアイソメトリック・コントラクションと言い、筋肥大はしにくいけど筋繊維動員率の向上に効果がある。

降りるときは肘や肩を痛めないようにゆっくり、重力に逆らいながら降りるようにする。このように負荷に耐えながらも筋肉が伸ばされることをエキセントリック・コントラクションと言い、より大きな筋力を発揮でき筋肥大に効果的。ただし筋肉痛になりやすい。

最初は逆手(手のひらを自分に向ける)で行い、10秒以上保持できるなら順手(手のひらを自分とは反対に向ける)で行ったり、アイソメトリックトレーニングは角度依存があるので肘角が60度、90度、120度のところでも行う。

フレンチーズ

片手ロックオフが難しい人はまずはフレンチーズをやるといい。フレンチーズも片手ロックオフと同じアイソメトリックトレーニングだけど負荷はもっと低い。前述したように、角度依存があるため肘角をかえてやる必要があるのだけど、片手ロックオフで肘角をかえると負荷が強すぎるという場合もフレンチーズがいいと思う。

やり方は、まず両手で懸垂をして一番上で止めて10秒間保持する。下まで降りたらまた懸垂して、今度は降りる途中に60度のところで止めて10秒間保持。次は同じようにして90度のところで、その次は120度のところで行う。

補助付き片手ロックオフ

フレンチーズよりも負荷を増やすために、反対側の手で補助しながらの片手ロックオフをやるのもいいと思う。補助側の手は鉄棒の支柱やバーに引っ掛けたロープなどをつかむようにする。

参考

2009年5月27日水曜日

iPhoneアプリの開発をはじめる

iPod touchを購入したので、iPhoneアプリでも開発してみようと思い立った。とりあえずどうすればいいのか調べてみると、iPhoneアプリの開発には以下のものが必要とのこと。

  • インテルCPUを搭載したMac本体
  • Mac OS X 10.5(Leopard)以降

さらに実機で動かしたりApp Storeで公開するためには

も必要になる。iPhone SDKに含まれているiPhone Simulatorで動かすだけなら登録は必要ないので、とりあえずは登録しないでiPhone Simulatorで試してみることにする。iPhone SDKはiPhone Dev Centerのアカウントを作るだけで無料でダウンロードできる。

Mac

開発にMacが必要というのはかなりハードルが高い。自分は同居人のiMacを使わせてもらえるので、開発はそのiMacで行うことにする。

ちなみに、Macを安く手に入れるのなら整備済製品や旧モデルを買うのがいいと思う。整備済製品は店頭商品、返品商品、初期不良品などをAppleがきちんと修理調整して1年保証をつけたもの。

iPhone Dev Center

iPhone SDKをダウンロードするためにiPhone Dev Centerのアカウントを作る必要があるのだけど(無料)、プロフィールの入力欄はすべて英語で入力しないと、iPhoneデベロッパプログラム(有料)に登録するときにエラーが発生して登録できなくなってしまうらしい。

特に氏名は後から自分で変更することができないので、日本語で登録完了してしまった場合は、Contact Usから直接連絡してApple側で変更してもらうことになる(なった)。

自分の場合は英語でメッセージを書いたのだけど、日本のAppleの人からすぐに日本語でメールが来て、登録画面のスクリーンショットを送ったり、短いやりとりの後、アメリカの担当部署に連絡したので待つように、ということになった。それで実際に変更されたのは約1ヶ月後だったので、急いでいる人は新しくアカウントを作ったほうがいい。

OS X

iPhone SDKをダウンロードしてインストールを開始するとすぐエラーになってしまった。エラーメッセージは、要約するとMac OS X 10.5以降が必要ということで、このときはじめて知ったのだけど、使わせてもらっているiMacのOS Xは10.4だった。

こればっかりはどうしようもないので10.5を購入することにした。ただし、自分のMacではないのでインストールは外付けHDDに。USB接続であれば問題なくブートできるらしいのだけど、念のため動作確認を行っているI-O DATAのものを購入した。

外付けHDDへのインストール、ブートもうまくいき、これでやっとiPhoneアプリの開発環境が整った。

2009年5月22日金曜日

インサイドフラッギング再考

ブログのタイトルを思いつきで「インサイドフラッギング」にしたため、その後このなんとなく使いにくいムーブを意識するようになった。

最近では自然とインサイドフラッギングが出るようになってきたのだけど、その次のムーブでひとつ前のインサイドフラッギングが無駄だったことに気づくこともある。たとえば、

  1. インサイドフラッギングで次のホールドに手を伸ばす
  2. 流していた足を次のフットホールドへ
  3. 次のホールドが遠いので足を踏み替えてダイアゴナル

というムーブをした場合、結局3.で足を踏み替えている。これは次のように1.で足を踏み替えた場合と比べて、結果的に足数は等しいため利点がないように思える。

  1. 足を踏み替えて次のホールドに手を伸ばす
  2. 流していた足を次のフットホールドへ
  3. そのままダイアゴナルで次の遠いホールドへ

つまり、次のムーブで足の踏み替えが発生しない場合(もう1回インサイドフラッギングとか、片足を切ったまま正対デッドとか)だと、足数がひとつ減るためインサイドフラッギングは正解だったということになると思う。

別にインサイドフラッギングが無駄になったとしても、足数は使わなかった場合と等しくなるだけなので、インサイドフラッギングでいけるならとりあえずやっておけばいいのかもしれない。

インサイドフラッギングの利点は、足の踏み替えが省略できることにのみあると思っていたのだけど、そもそもそれが間違っているのかもしれない。ということで調べてみた。Webページで一番わかりやすかったのがこちら。

つまり、足の踏み替えが省略できる、と。

さらにフリークライミング (ヤマケイ・テクニカルブック 登山技術全書)によると、

つま先で壁を押すようにすると左右の足の間に微妙なオポジション効果が生まれ、アウトサイドよりさらに安定し、ハンドホールドの位置によってはレストもできる。

と書かれている。足の踏み替え云々については一言も触れられていないけど、ムーブそのものの説明なので、その結果である踏み替えの省略については言及していないだけだろう。

それよりも重要なのはアウトサイドよりさらに安定するという点だ。そもそもアウトサイドと比較するのがよくわからないのだけど(使いどころが違うと思う)、場合によってはレストもできるくらい安定するものらしい。まだそんな経験ないけど。

さらにさらに、ジムに置いてあるかんたんフリークライミングでも調べてみたのだけど、アウトサイドフラッギングについてさえ言及されていなかった。初心者向けの本だから仕方ないか。

(追記)意外にもクライミングJOY No.1に詳しく書いてあった。基本的には上記のとおりなのだけど、ハイステップなど正対ムーブのあとや、ホールドがサイドプルやアンダーのときに使うことが多いとのこと。

(追記)小山田大 DVDでボルダリング平山ユージ DVDでクライミングでも確認してみた。動画だとイメージはつかみやすいけど解説はあまり詳しくない。

まとめ

ということで、当初の理解で大きな間違いはなかったということになると思う。以下に簡単にまとめてみる。

何をするときに使うのか
  • 次の一手をスタティックに出す
  • クリップ
  • レスト
どういう状況で使うのか
  • そのままの足ではバランスが悪くカウンターバランスが必要
  • フットホールドの位置が低いためアウトサイドフラッギングは使えない
  • 踏み替えでもいける
  • アウトサイドフラッギングでは地面に足がついてしまう
何がうれしいのか
  • 足の踏み替えが省略できて省エネ
  • とても安定する(らしい)

(追記)インサイドフラッギングでしかできないムーブもあった。詳しくはインサイドフラッギング補足の追記部分を参照。

2009年5月16日土曜日

クライミングによる指の関節炎について

おおよそクライマーと呼ばれる人種で、"健康な指"を持っている者はまずいまい。

クライマーズ・ボディ p.132

クライミングでは指を伸ばすほうの筋肉も鍛えたほうがいい、というのは重々承知しているので、それなりに気をつけて指のストレッチなどもなるべくやるようにしている。そのためかどの指もちゃんとまっすぐ伸びはするのだけど、気がついたら両手とも中指が曲がりきらなくなっていた。

  • 指の第一関節と第二関節を内側に曲げてみて、指先が付け根あたりにつかない場合は、関節が変形を起こし可動域が小さくなっている。自分は両手とも中指だけがつかない。
  • 手のひらを開いて指を閉じたときに、指と指の間に隙間が空くようならこれも関節が変形を起こしているということ。自分は中指と人差し指の間に大きな隙間ができてしまう。中指と薬指の間は少しだけ。

上で挙げた指関節の障害は炎症からはじまっているものなので、予防にはアイシング、またはそもそも指に負荷をかけないようにする(テーピングも有効)。関節を押さえて痛みを感じる場合は、組織修復のために炎症を起こしている可能性が高い。

(追記)手を開いたときに指が伸びないのは、登るとき使うのと反対の伸ばす筋肉(拮抗筋)が弱いかららしい。関節炎が原因であるかのように書いていたのを修正。この場合は、単純に指を伸ばす運動をすればいい。

アイシングについてはクライマーズ・ボディでも解説されているけど、ROCK & SNOW 2009夏号 No.44Jack中根のクライミング道場がとても詳しい。間違ったアイシングは逆効果の場合もあるので、指が痛いから何となくアイシングしているという人は読んでみるといいと思う。

あとは、MUSASHIのJOINTが効くという人もいるけど、自分は使ったことがないので効果のほどはわからない。アイシングで改善しないのならサプリメントに頼るのもいいかもしれない。

(追記)スイッチOTCの消炎鎮痛剤であるジクロフェナクナトリウムを配合した湿布がよく効く。フェルビナクやインドメタシンはほとんど効果が実感できなかったけどジクロフェナクナトリウムは違った。製品としてはジクロテクトテープボルタレンACテープなどがあり、スイッチOTC薬なので今では薬局などで処方箋なしで購入できる。指関節のサイズに切るのが少し面倒。ローションやゲルも発売されているけど、湿布だと手を洗いたいときなどに一度剥がしてまた後で貼ることができる。

参考

2009年4月24日金曜日

自宅でできるクライミングのためのトレーニング

自宅でできるトレーニングについて考えてみた。ここでいう「トレーニング」はただの筋力トレーニングのことではなく、もっとクライミングに近い前段階になるようなもの。別にジムに行く時間がとれないというわけではないのだけど、システマティックなトレーニングの必要性を感じてきたのと、ジムでは登るほうに重点を置いたほうがいいと思うので。

キャンパスボード

効果はとても高いだろうけど(キャンパシング参照)、まずはキャンパスボードを自作するところから始めなければならない。検索してみるとキャンパスボードを自作している人は意外に多いようだ。設置も自立式にすれば問題なさそう。でも製作のための材料や道具も買わなければならないので、費用はかなり高くなってしまうと思う。あと、はっきり言って面倒くさい。正直そこまでのモチベーションはないのであっさり断念。

ポータブルロック

東商アソシエートのポータブルロックは上で挙げたキャンパスボード自作の問題点をすべて解決している。さらに折りたたみ収納もできるというすぐれもの。値段は39,900円プラス東京への送料が3700円で合計43600円。決して安くはないけど、自作の手間や材料費などを考えると悪くないかもしれない。ただ自分の場合はホールドは必要なくて、それよりも両面ともキャンパスラングだとよかった。あとは、あの足を投げ出した姿勢でキャンパシングと同じ効果が得られるかわからないので、一度体験できるといいのだけどなかなかそうもいかないし、購入には踏みきれない。

フィンガーボード

もう少しハードルを下げてフィンガーボードはどうだろう。基本的には懸垂片手ロックオフによる筋力アップと、デッドハング(静止ぶら下がり)による指の筋動員率向上が見込めるとのこと。値段もそんなに高くないので欲しいのだけど、致命的なことに賃貸のため穴をあけることができない。

(追記)斬新なフィンガーボードの設置方法も参照。

ロックリングス

さらにお手軽なものではメトリウスのロックリングスというのがある。トレーニングのバリエーションはフィンガーボードよりも少なくなってしまうけど、スリングをかけるだけで設置ができるというのは魅力的だと思う。そこでふと思いついたのだけど、これを2セット購入して壁にくっつけるようにそれぞれ高さをかえて設置すれば、キャンパシングができたりして?しっかり壁に固定するわけではないので、飛びついた瞬間に横に動きそうなのが心配だけど。

日本で購入すると1セット5880円だけど、REIで個人輸入すれば30ドルなので今の為替レートなら同じ値段で2セット買える(送料がいくらかわからないけど)。ということで2セット買いを現在検討中。ちなみにロックリングスの説明書(PDF)はフィンガーボードのものと共通で、トレーニング方法についても書いてある。

(追記)引越しにより設置場所がなくなってしまった。

2009年3月30日月曜日

キャンパシング

効率的に強くなるためにキャンパシングをやったほうがいいと強い人に言われ、キャンパシングについて改めて調べてみたのでまとめてみる。

コンタクトストレングス

キャンパシングの一番の効果はコンタクトストレングス(接触筋力)の向上で、これは簡単に言うと、デッドやランジで次のホールドを触った瞬間にどれだけの力をこめられるかの能力のこと。そのホールドを止められるか止められないかはこのコンタクトストレングスによるところが大きい。

コンタクトストレングスは最大筋動員率によって決まるのだけど、最大筋動員率を高めるには瞬間的に最大筋力の限界近くの負荷をかける必要がある。キャンパシングの負荷はそれにとても近いためコンタクトストレングスのトレーニングに有効。

他にもキャンパシングによってタイミング、筋肉の動きの協調、自信などダイナミックムーブに必要な能力と、最大筋力を発揮し続けるスタティックな力も向上させることができる。また、次のラングを止めた瞬間の体の振れを抑えるのはクライミングに必要とされる体幹の強化につながる。

フレッシュな状態で行う

コンタクトストレングスのトレーニングは瞬間的に最大筋力を発揮する必要があるので、体が完全に回復したフレッシュな状態で行うべき。各セットの間もしっかりレストする必要がある。クライミングの後の疲労が蓄積した状態でのキャンパシングは非効率。また、負荷の強いトレーニングなのでやりすぎには注意する。

オープンハンド

キャンパシングは基本的にオープンハンド(タンデュ)で行う。オープンハンドはクリンプ(アーケ、カチ持ち)の力も向上させる(とメトリウスの説明書に書いてあるけど本当だろうか?)し、指の故障が起きにくい。小さなラングの場合、4本指だと中指が反ってしまうことがあるが、その場合は小指を除く3本で行ってもよい。ちなみに、オープンハンドはポケットやスローパー、ダイノのときなどに必須の持ちかたでもある。

反復回数と負荷

キャンパシングの目的は持久力ではないので、各トレーニングのムーブは反復回数がそれぞれの腕で3-5回程度になるくらいの難しさに設定する。負荷が高すぎる場合は壁や椅子に足を乗せて補助にしてもいい。

パワースロー

各ラングに一番下から順番に1, 2, 3...というように番号をつけた場合、たとえば1にマッチした状態でスタートし、まず右手で4をとり、続けて左手で6をとって、右手も6にマッチして終了というようにする。これを間隔を変えて1-2-6, 1-3-6, 1-4-6, 1-5-6のように全ての間隔でできるようにする。このトレーニングでは、1-4-81-5-9のように自分の限界のラング間隔を伸ばすように努力する。リードハンド(最初に出すほうの手)を変えて2回で1セットとする。また、登るよりも下りるときのほうが負荷が高いため、一番上でマッチしたら終了とするのではなく、そこから下りてくるようにするのも効果が高い。

ダブルダイノ

当然だけどダブルダイノはパワースローよりも負荷が高い。最初は一番近くのラングへ1回だけ飛び移るとこらから始めて、力がついてきたらラング間隔と回数を延ばしていく。下に向けてのダブルダイノもできるようにする。上級コースとしては1-3-2-4-3-5-4-6のように2段登って1段下がるものがある。

プライオメトリクス

さらに負荷を高める方法として、上のラングをとった瞬間に素早く下のラングに戻したり(6,46を取った瞬間に4に戻すのを表すとすると、1-4,2-5,3-6,4-7,5など)、上のラングから下のラングにダブルダイノして瞬時にまた上のラングにダブルダイノするリバースダブルダイノなどがある。このように一瞬で筋出力を切り替える方法をプライオメトリクスと言って、最大筋動員率が飛躍的に高まるそうだ。その一方で、プライオメトリクスは負荷が非常に強い上級者向けのトレーニングで故障の可能性も高い。

スタティック

キャンパシングによってスタティックな力も向上するけど、パワースローを短い間隔で可能な限りゆっくりとしたスピードでやればスタティックな力のトレーニングになる。他にもスタティックなラダー(1-2-3-4-5-6-6-5-4-3-2-1)や片手ロックオフ(詳しくは片手ロックオフ参照)なども有効。

バリエーション

保持する指を少なくしたり、大きさやタイプの異なるラングを使うなどしてバリエーションをもたせることができる。ラングの大きさが変わると使う筋肉も変わる。小さいホールドでは前腕が、大きいホールドでの遠いラングをとるムーブでは上腕や背筋が鍛えられる。また、インカットしてるラングとフラットなラングでも使う筋肉が違うため、できる限りバリエーションをもたせるほうが効果が高い。

参考

2009年3月18日水曜日

UTF-8環境と曖昧な文字幅

UbuntuはデフォルトでUTF-8環境なのだけど、ターミナルエミュレータ上でw3mやEmacsを使っていると表示が乱れることがときどきある。Unicodeが持つ「東アジアの曖昧な文字幅(East Asian Ambiguous Character Width)」というのが原因で起きる問題らしい。

「東アジアの曖昧な文字幅」問題とは文脈によって文字幅が変化する文字があって、そういう文字をアプリケーション側で全角(fullwidth)として扱えばいいらしいのだけど、半角(halfwidth)として扱うと表示されるフォント幅と食い違って、結果として表示が乱れるということのようだ。

いろいろなWebページを参考にして設定をしてみたのだけど、ほとんどまったく解決しなかった。あまり深追いもしたくないので、とりあえずやれるだけやったことを各アプリケーションごとにメモしておく。

mlterm

mltermは設定ファイルに1行追加することで回避できる。

% echo "col_size_of_width_a = 2" >> ~/.mlterm/main

または、起動時にオプションを指定することでも可能。

% mlterm -a 2

これで全角で表示されるはずの文字(■など)が半角で表示されることはなくなったのだけど、その前の文字をバックスペースで消したりすると表示が乱れる。

Screen

~/.screenrc

defencoding utf-8
encoding utf-8 utf-8
cjkwidth on

を追加して、起動時に-Uオプションを渡す。

% screen -U

defutf8 onutf8 on-Uオプションで起動すれば必要ない。cjkwidth onが曖昧な文字幅問題を解決するための設定で、Ubuntuのパッケージはパッチが取り込まれていて使用可能になっているのだけど、mlterm単体でもおかしいので効果があるのかはよくわからない。

Emacs 22

~/.emacsに下記を追加する。

(set-language-environment "Japanese")
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(setq default-buffer-file-coding-system 'utf-8)
(prefer-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(setq file-name-coding-system 'utf-8)

Emacs 22ではutf-translate-cjk-modeというマイナーモードが追加され、デフォルトで有効になっているためmule-ucsは必要ない。曖昧な文字幅問題はEmacs22 + UTF-8 における文脈依存な文字幅の問題についてに書いてある設定で解決する。試してみたところGUIで起動した場合は確かにまったく問題ない。でも、-nwオプションをつけてmlterm上で起動した場合は当然だけどだめだった。

w3m

一番問題になるのがw3m。ページによっては表示の乱れが激しすぎて使い物にならない。w3m-cvs-1.914-ambwidth.patchを当てて、ある種のUnicode文字を全角にするYesにすればいいらしいのだけど、パッケージを作り直すのが面倒そうなのであっさりあきらめる。HP 2133購入後はFirefoxをメインに使うようになったので、別にw3mはなくても問題ないし。

参考

2009年3月7日土曜日

Migemo(C/Migemo)のインストール

Migemo

UbuntuにはC/Migemoのパッケージがないのだけど、新しいPCは速いし、普通のMigemoでも大丈夫だろうということで試してみた。

% sudo apt-get install migemo

Emacsは、~/.emacs

(load "migemo")

と書くだけで問題なく使えた。

w3mは、雑多な設定Migemoコマンド

migemo -t egrep /usr/share/migemo/migemo-dict

としてみたけど日本語をまったく検索できない。いろいろ調べてみたところ、どうやらMigemoはUTF-8に対応していないようだ。

C/Migemo

Migemoのスクリプトを修正するのも面倒なので、やっぱりC/Migemoをソースからインストールすることにした。ダウンロードしたtarballを展開したら次のようにする。

% sudo ./configure
% sudo make gcc
% cd dict
% sudo make utf-8
% cd ..
% sudo make gcc-install

Emacsの設定は

(setq migemo-command "cmigemo")
(setq migemo-options '("-q" "--emacs"))
(setq migemo-dictionary "/usr/local/share/migemo/utf-8/migemo-dict")
(setq migemo-user-dictionary nil)
(setq migemo-regex-dictionary nil)
(setq migemo-coding-system 'utf-8-unix)
(load-library "migemo")
(migemo-init)

とすればいい。

w3mは

cmigemo -q -d /usr/local/share/migemo/utf-8/migemo-dict

で正常に動いた。

ちなみに、C/Migemoをインストールしても、Emacsで使うためにはmigemo.elが必要なので、普通のMigemoもインストールしなければならなかった。

2009年3月5日木曜日

Googleブックマーク追加用のブックマークレット

Googleブックマークを使い始め、ブックマークレットでブックマークの追加をやろうと思ったのだけど、Google Bookmarks FAQに載っているのだとサイト名とURLしかフォームに表示されない。どうせならメモmeta descriptionに書かれているサイトの説明文を読み込ませたい、ということで改造して作ったのがこれ。

ブックマークに追加すれば使えるはず(Firefoxで確認)。

(2012/5/14 追記)meta descriptionが異常に長いサイトを追加しようとしたら、Google側でエラーになってしまったので500文字で切り捨てるようにした。

(2012/6/27 追記)500文字以内でも...を末尾に追加してしまうバグを修正。

最初はラベルmeta keywordsから読み込ませるようにしてみたのだけど、meta keywordsをやたらとたくさん書いてあるサイトをブックマークしたら、ラベルの数が多くなりすぎてしまい一瞬で破綻した。

2009年2月28日土曜日

Ubuntu on HP 2133 Mini

(追記)Ubuntu 10.04 LTSにアップグレードした。動画の再生が遅いこと以外、8.04で遭遇した問題はすべて解決し、起動時間が大幅に短くなった。

今までかたくなに大昔のLOOXでLinuxを使ってきたのだけど、ネットブックが安く手に入るようになってきたため、とうとう新しいノートPCに移行した。

値段とHDDが理由でHP 21333 Miniのスタンダードモデルを選択。ちょうど値下げ直後に買えたのは幸運だった。インストールしたのは前のノートPCでも使っていたUbuntu。

使い始めてすでに数ヶ月経つけどとても快適。GNOMEデビューも果たすことができたし。Firefoxが動画サイトによっては遅いこともあるけど他には特に不満もない。

デュアルブート

インストール前から気になっていたのだけど、Windows Vistaとのデュアルブートはとても簡単にできる。というのも、Ubuntuのインストーラ自体にNTFSのパーティションをリサイズする機能があるからだ。GRUBのメニューにも自動的に反映される。なので、細かいことは気にせずとりあえずインストーラを起動すればいい。

インストール

HP 2133にはCD/DVDドライブはついてないけど、SDカードリーダがついているためSDカードからインストールした。

インストールしたバージョンは8.04.1 LTSで、Ubuntu Desktop 日本語 RemixのCDイメージをダウンロードして使った。

基本的にはHP 2133 Mini-Note - Ubuntu Wikiのとおりにやれば問題ないのだけど、不必要な手順もあるようなのでUbuntu日本語フォーラム / HP2133 Mini-Note PC で無線LANが動きましたも見ておくべき。Rhythmboxで音楽が再生できないのはハマった。

追記

  • そういえばサスペンドとハイバネーションの復帰に失敗する。仕方ないので毎回ブートしている。
  • F-Spotフォトマネージャが起動に失敗する。
  • Firefoxで動画があるページを開いていると(再生していなくても)、mplayerなどの動画再生ソフトが絶望的に遅い。

2009年2月24日火曜日

インサイドフラッギングについて

このブログのタイトルの「インサイドフラッギング」はクライミングのムーブ(クライミングにおける独特な動きのこと)からとっている。とくに深い意味はなく、ブログの登録のときになんとなく思いついただけである。

インサイドフラッギングは使いどころがとても難しい。クライミングのムーブの中で一番使いにくいムーブかもしれない。インサイドフラッギングの利点は、

  1. カウンターバランスを使いたいけど
  2. アウトサイドフラッギングは使えない状況で(フットホールドの位置が低い)
  3. 足の踏み替えを省略できる(ダイアゴナルだと踏み替えが発生してしまう)

ことだと思う。たぶん。自分は無駄な踏み替えが発生しないか考えながらじゃないと使えないのだけど、慣れてくれば無意識のうちにできるようになるのだろうか。

(追記)インサイドフラッギング再考で続きを書いた。

2009年2月23日月曜日

RackでCGI

RackはWebサーバとWebフレームワークをつなぐ最低限のAPIを提供するライブラリで、ハンドラはMongrelやWEBrickだけではなくCGIもサポートしている。ということで、Rackを使えばCGIを書くのにcgi.rbを使う必要がなくなる。また、コードを変更することなくCGIからMongrelなどに切り替えることもできる。

CGIの場合、Webサーバは別で立ち上がっているはずだから、実はrackupは必要ない。とりあえずHello world!をCGIハンドラを使って書いてみるとこんな感じになる。

#!/usr/bin/env ruby
require "rubygems"
require "rack"

class HelloWorld
  def call(env)
    [200, {"Content-Type" => "text/plain"}, "Hello, world!"]
  end
end

Rack::Handler::CGI.run(HelloWorld.new)

あとは普通のCGIと同じように実行権限をつけてcgi-binなどに置けばいい。

ミドルウェアを使う場合は

Rack::Handler::CGI.run(Rack::Session::Cookie.new(HelloWorld.new))

のようにすればいい。RackのミドルウェアはDecoratorパターンで実装されているので、newの引数にアプリケーションをわたすことで何回でもdecorateできる。

WEBrickを使ってテストしてみる。CGIとして実行させたいのでrackupは使えない。

require "webrick"

DOCUMENT_ROOT = File.dirname(__FILE__)

srv = WEBrick::HTTPServer.new(:DocumentRoot => DOCUMENT_ROOT,
                              :BindAddress => "127.0.0.1",
                              :Port => 3000)
srv.mount("/hello_world.cgi",
          WEBrick::HTTPServlet::CGIHandler,
          File.join(DOCUMENT_ROOT, "hello_world.cgi"))
trap("INT"){ srv.shutdown }
srv.start

このスクリプトを実行してから、

http://localhost:3000/hello_world.cgi

にアクセスすればHello, world!と表示されるはず。

(追記)上記のHelloWorldクラスはContent-Typeしかヘッダを返していないため、Rack::Lintを使うとエラーになる。これを解決するにはヘッダにContent-Lengthも追加すればいい。Content-Lengthの値は数値ではなく文字列で渡す必要がある。Rack::LintはアプリケーションがRackのスペックに適合しているかをチェックするミドルウェア。

class HelloWorld
  def call(env)
    body = "Hello, world!"
    [200, {"Content-Type" => "text/plain", "Content-Length" => body.size.to_s}, body]
  end
end

実際のアプリケーションではRack::RequestRack::Responseを使うだろうから、あまり問題にはならないかもしれない。