トップ 最新 追記

2009-01-01 [長年日記]

_ Rake と環境設定がだいぶ分かってきた

年末からやってたドットファイル一本化の流れ。ダラダラっとメモ。

環境判別あれこれ

.emacs

実際には書き換えの際に .emacs.el という名前にしちゃったんだけど、それはともかく。

(when (fboundp 'XXX-mode)
  ())
(cond (window-system
  ())
(when (eq window-system 'mac)
  ())
(when (eq window-system 'w32)
  ())
(if (> emacs-major-version 21)
    (progn
      ()))

なんかこんなの使ってます。

.zshrc

uname くらいしか思いつかないけど、そんなもんなんでしょうか。

  • Linux
  • FreeBSD
  • Darwin

あとはコマンドの実行をそのまま評価したり。

Rake の定義

task 定義
  • file
  • dir
  • task

「何かの処理で何かのファイルを生成する」のでなければ task を使う。

メソッド定義

task の定義時に必要なメソッドは当然 task 定義より前に定義されていなければならないが、実行時に必要なメソッドは task 定義のあとに書いておくことができる。

def method_A
end

if ( method_A )
  task task_A do
    method_B
  end
end

def method_B
end

つまりこういうこと。

Rake の呼び出し

task 呼び出し

task の中から他の task を呼び出すことはたぶんできない。依存 task として定義することはできる。

ということは task は何かの戻り値をもとに処理を決定するように書くのではなく、何かの処理が完了している場合にこの処理が実行可能という形で組み立てていく必要がある。

メソッド呼び出し

task の中からメソッドの呼び出しは普通にできる。

ただし task も namespace も Ruby 的には Global というか main のメソッドであり、その中のブロックも main に属している。例えばメソッドを何らかの module や class の中に用意した場合、task のスコープと合わないので変数の受け渡し、定数の参照で食い違いが発生する。(恐らく Capistrano は set メソッドでこの問題を解決している。まだそこまで読み込んでないけど。)

ここ注意。

オプションを取らずにタスクを取る

基本的に Rakefile で扱えるのは task のみで、Ruby スクリプトへオプションを与えるという形は考えない方がよさげ。

仮に似ているけどちょっと違う task というものが増えそうなら task 定義そのものを動的に行えるようにすればよい。task はメソッドとは違うので、特に難しいことはない。例えば

[ ..  ].each { |e|
  desc "desc_#{e}"
  task "task_#{e}" do
    ..
  end
}

てな形。

デフォルトでタスク一覧を出力

Rake は default を定義しておかないと怒られるが、default でいきなり仕事が始まっちゃうのはちょっとなぁと思ったので、-T 相当の動きをしてくれるようにしてみた。

Tags: Ruby Rake

2009-01-03 [長年日記]

_ GNU Emacs と Meadow を間違えてた

MSI U100 をある程度使いものになるように環境を作っているんだけど、早速 Emacs でハマっていた。理由はなんのことはない、

Meadow だと思いこんで素の Windows 版 Emacs をセットアップしていた

から。

Meadow が GNU Emacs そのものでないことは承知していたつもりだったんだけど、いざインストールをする段になってすっかり忘れていたらしい。アホすぎる。悩んだ時間がもったいないわ。

ちなみになぜ Meadow にしているのかというとそんなに強いこだわりはなくて、Windows 用の Emacs として日本語の情報量がより豊富なのは Meadow なんじゃないかな、という印象から。

Tags: Win Emacs

2009-01-04 [長年日記]

_ カバン買った

10年振り?11年振り?12年振り?に自分用のカバンを買った。いわゆる出張用のカバン。これでちょっとした小旅行的なものもだいぶ楽になるな。一応 MSI の U100 の環境もそれなりに揃ってきたし、e-mobile もあるし。

Tags: 日々

_ Meadow に苦戦

自分だけ向けメモ。設定が効いてんだか効いてないんだかよく分からない。

install.exe は実行しなくちゃいけないっぽい。でないと autoloads とか便利な機能がちゃんと動かないっぽい。

Windows しかないときにもそれなりに作業できるようになるためにはやっぱ Meadow 必要だよなーたぶん。

Tags: Win Emacs

2009-01-05 [長年日記]

_ Launchy 入れてみた

Launchy: The Open Source Keystroke Launcher

普段 Windows は使ってないんだけど、MSI U100 の環境整備の一環で入れてみた。

Vista ではスタートメニューの検索窓を、Mac のときは SpotLight や shell の alias をランチャ代わりに使っているんだけど、XP にはこういう便利なものはない。昔は MoonLight や、これが AVG とバッティングして以来 bluewind を使ったりしていたんだけど、今これらを見るとどうもピンとこないということで QuickSilver 風のランチャにしてみた。

うむ。なかなか雰囲気があってよい。てことはもう選択基準が雰囲気になっているんだな。昔はちょっとでも速く動くことにこだわったもんだが、そんなことは気にならないくらいには netbook の性能が高いということか。

Tags: Win

_ netbook の運び方

U100 をちょっと泊まりで持って行こうと思ったわけだけど、ケースが邪魔だなと思う。(MSI U100 はケースが標準でついてくる。)

カバンが十分大きくて車で移動とかなら多少荷物が大きくなってもなんとも思わないけど、今回は電車移動なのでできるだけ荷物を膨らましたくない。

というわけであれこれ考えたけど今回は着替えで挟み込む形にした。靴下を底部に、裏表をワイシャツと肌着の層で挟み込む。うむ、これはイケる。

Tags: 日々

2009-01-06 [長年日記]

_ 自分の環境を手っ取り早く再現するツールの構想

※ 実際にはこの日記は3月に書いていて、すでにツールはある程度形になっています。

wtnabe's myenv-builder at master - GitHub

とりあえず dot file にリンクを張る

年末からいい加減 .zshrc とか .emacs とか整理しなきゃと思って作業しているわけだけど、これはただ整理するだけでなく、

一本化したうえでバージョン管理することで、どの環境でも間違いなく最新のものを利用できるようにする

ことを目的にしている。しかしドットファイルはホームディレクトリに置くのでそのまま素直にやると

~/
|-- .colordiffrc
|-- .fd2rc
|-- .irbrc
|-- .screenrc
|-- .subversion/
|-- .zshrc
|
|   ものすごく大量の要らないファイル
|
`-- ...

という形になって、ものすごく無駄かつ現実的じゃない。そこでこういう形を取ることにした。

~/
|-- .colordiffrc -> ~/dotfiles/colordiffrc
|-- .fd2rc -> ~/dotfiles/fd2rc
|-- .irbrc -> ~/dotfiles/irbrc
|-- .screenrc -> ~/dotfiles/screenrc
|-- .subversion -> ~/dotfiles/subversion/
|   `-- config
|-- .zshrc -> ~/dotfiles/zshrc
`-- dotfiles/
    |-- .svn/
    |-- colordiffrc
    |-- fd2rc
    |-- irbrc
    |-- screenrc
    |-- subversion
    |   `-- config
    `-- zshrc

dotfiles/ というディレクトリを掘ってここにドットファイルの実体を置き、このディレクトリをバージョン管理する。使うときにはホームディレクトリからこのディレクトリの中の対応するファイルに symbolic link を張る。

実際にはこれは rake の練習を兼ねているので dotfiles/ の中に Rakefile を置いて、自動で link を張れるようにしている。ホームディレクトリに対応するファイルがあったら当然止まっちゃうんだけど、そこはメッセージを分かりやすくしたうえで止まるままとしておいた。問答無用で消しちゃったりすると悲しいことになるかもしれない。

Windows でどうするかは未定

問題は Windows で。

Windows には symbolic link の機能はない。でも Windows でも同じように恩恵に預かりたい。まぁ Windows を使う時間は長くないのでそんなに困らないんだけど、長くないからこそ使うときにはすぐにいつもの環境になってほしい。環境構築に時間を掛けるのが楽しい時期はとっくに過ぎてしまったもの。

なんか方法ないかなーと思いながら

Rubyist Magazine - Ruby Library Report 【第 4 回】 Win32Utils

を読みつつあれこれ試してみたけど、やっぱ無理っぽい。shortcut を作っても認識はされないし、hard link でいいかと思ったけど hard link はディレクトリに対しては無理だ。

どうしたもんかなぁ。

Tags: Ruby Rake

2009-01-07 [長年日記]

_ 携帯のバイブが壊れたがなぜか寝坊しない

なんかどうも数日前から携帯のバイブ機能が壊れているような気がしていたが、最近はどういうわけか目覚ましの鳴る時間の直前くらいに目が覚めていたので「アレ?気のせいかな?」とも思っていた。それにしちゃメールの着信とか全然気づかないし変だなとは思っていたんだけど。

しかし確信した。壊れている。そして連日奇跡が起きている。

今日も目覚ましの鳴るはずの時間の直前に目が覚めた。そして指定の時間になるまで携帯を見つめていたがやはりアラームは働いていた。しかしバイブのみにセットしてあったため何の意味も成していなかった。いやーなんだろ、こんなところで運を使っていていいのか。

Tags: 日々

2009-01-08 [長年日記]

_ Meadow の IME 変換時のフォント設定

Meadow は情報が多そうということで選んだんだけど、いざ探してみるとやはり情報が散在していて一筋縄ではいかないっぽい。

今回困ったのは IME の変換時のフォント設定。こんなもん他の文字と同じ設定になるように勝手にやってくれりゃいいのに、そういうわけにはいかないらしい。あれこれ試した結果

momoLife: Meadowの設定ファイル

これに従ったらできた。なぜかは知らない。フォント周りに突っ込む気はさらさらないのだ。触らぬ神に祟りなし。

Tags: Win Emacs

2009-01-09 [長年日記]

_ 今度は Thunderbird の署名設定の振り返り

Thunderbird の署名なんてどうやって作ってるのかすっかり忘れていたけど、自分の環境は以下のようになっていた。

  • Signature Switch を使って署名の切り替えと外部エディタでの編集を可能に
  • 導入部も何もかも署名の中に入れて Thunderbird のテンプレート関係の機能は一切使わない

なるほど。試してみるとテンプレート機能ははっきり言って全然使いものにならない。(Thunderbird 2 時点では。)

※ Signature Switch を使えば署名ファイルの存在そのものは直接気にしなくてもよくなるかなーと思ったけど、それは Signature Editor の機能だった。

というわけで Windows 用の Thunderbird もこんな感じで環境を作ればいいのか。


2009-01-13 [長年日記]

_ みんなのうた DVD-BOX はユーキャンで売ってる

ふと気になってみんなのうた製品を探し始めたのだが、CD-BOX はあっても DVD-BOX は見つからなかった。

しかし意外なところで発見。

NHKみんなのうたの映像集大成版 DVD12巻セット【ユーキャン】

どうも権利が NHK の方にないのか(そんなわけないよな)、NHK のショップにも Amazon にもない。存在するのは嬉しいんだけど、これはちょっともったいないね。まさかユーキャンには探しに行かないって。(というかユーキャンて通信教育専門ではなく通信販売もやってたのね。)

Tags: Music

2009-01-17 [長年日記]

_ CentOS の zsh で svn の補完

svn を rpmforge でアップグレードしたら zsh の補完がぶっ壊れた。

と思ったらこの件は有名なものらしい。

CentOS 5.2 で Subversion 1.5.x にアップデート・zshの補完も修正 - 肉とご飯と甘いもの @ sotarok

この辺がねぇ。中途半端にあちこちのリポジトリに頼らなきゃいけない rpm 系の弱いところだよね。

_ php の --r 系オプション

PHP 4 時代には存在しなかったので気にしたことがなかったけど、PHP 5 には --r 系のオプションがある。

 --rf <name>      Show information about function <name>.
 --rc <name>      Show information about class <name>.
 --re <name>      Show information about extension <name>.
 --ri <name>      Show configuration for extension <name>.
$ php --rf array_map
Function [ <internal:standard> function array_map ] {

  - Parameters [4] {
    Parameter #0 [ <required> $callback ]
    Parameter #1 [ <required> $arg1 ]
    Parameter #2 [ <required> $arg2 ]
    Parameter #3 [ <optional> $... ]
  }
}

おぉ、便利じゃん。と思ったけど

戻り値が分かんないじゃん、これ。

そりゃないよ。そりゃーない。それに引数の方もちゃんと全部説明が出るのかと思ったらそうとは限らないみたい。あーなんだよもう。

やるならちゃんとやってくれって。頼むから。

Tags: PHP

_ PHP で curl 使ってみた

例によって変な落とし穴が。

CURLOPT_RETURNTRANSFER
TRUE to return the transfer as a string of the return value of curl_exec() instead of outputting it out directly.

ということは

curl_setopt( $curl_object, CURLOPT_RETURNTRANSFER, 1 );

してやらないと curl_exec() した瞬間に内容が stdout へ吐き出されてしまう。

この仕様で嬉しい人いるの?

分からんなぁ。デフォルトはできるだけ広く嬉しい設定にしておくもんじゃないの?

Tags: PHP

2009-01-19 [長年日記]

_ Seagate 祭りには参加できず

我が家のディスクはレコーダ以外は Seagate ではなかった。仕事関係のディスクに Seagate のものはあったけど型番外れ。

しかし knowledge base にしか情報がなくてニュースリリースになってないのはどうなんだろうな。まぁまだ調査段階なのかもしれないけど。

Tags: Sysadmin Disk

_ rssh は rsync 3 には対応できないらしい

自分でちゃんと確認したわけではないんだけど、どうやらそうらしい。まぁ更新が止まったままだったのでいつかこの日が来ることは分かっていたわけだけどね。

rssh にしかない機能もあるけど、諦めて scponly に移行すべきでしょうな。


2009-01-20 [長年日記]

_ OSX の ssh-agent を潰す

09:11:26 wtnabe< あれ。昨日潰した login.keychain が復活してる!
09:14:22 wtnabe< みんなこの keychain 全然疑問ないのかな。すっげー邪魔
なんだけど。
09:19:35 kinneko> も。
09:23:39 wtnabe< keychain の 「login」 はどこまでの範囲なんだろう
09:23:46 wtnabe< まぁ削除してみるか
09:25:51 wtnabe< あーやっぱ他(ブラウザ)のもみんな消えた。
09:26:15 wtnabe< ssh とか terminal 上の操作だけ keychain が出しゃばら
ない設定ってどうやるんだろう。
09:28:48 wtnabe< そして再度「ログインを作ったらファイルが日本語ででき
た。なんでや。
09:32:53 wtnabe< もう一ヶ月くらいこれでイライラしているが全然解決方法
が分からないオレのバカバカバカ
09:35:47 wtnabe< そしてこれだけつぶやいても誰も助けてくれない twitter
のバカバカバカ
09:36:01 wtnabe< まぁ twitter は助けてくれないが
09:46:34 kinneko> @wtnabe SSH_AUTH_SOCKは使えないの?
09:56:53 wtnabe< @kinneko ssh-agent も keychain も無効にしたいんですー
10:07:34 kinneko> @wtnabe 都度パスフレーズを入れたいってことね。
10:07:34 kinneko> @wtnabe それって、unset SSH_AUTH_SOCKだけじゃダメなの?
10:10:00 wtnabe< @kinneko で、できました。。。えー。でもこんなことやっ
たことないのに自宅の Mac はなぜだんまりなんだろう。
10:10:35 beckyco> .@kinneko unset SSH_AUTH_SOCKだけじゃダメダヨ♪
10:10:48 wtnabe< @kinneko .zshrc は共通なんだから、どっかでなんか別な
方法で off にしてるんじゃないかと思うんですが。
10:11:07 wtnabe< @kinneko それはもう分からないということにしてしまうの
がイチバンてことかしら。
10:12:45 wtnabe< というか .zshrc で設定できた方が同じ環境を再現しやす
いからその方がいいんだ。そうだ。
10:13:34 kinneko> @wtnabe 試してみたけど、ちゃんとダイアログじゃなくて、
Enter passphrase for key '/Users/kinneko/.ssh/id_rsa': がコンソールに
出て来たよ。
10:16:34 kinneko> @wtnabe 自宅のほうは、何かファイルが壊れているのかもね。
10:16:35 kinneko> @wtnabe ユーザー新規に作ってやってみても同じなら再イ
ンストールかな。ちゃんと動いたら、設定類を新しいユーザーと比較してみる。
10:19:34 kinneko> @wtnabe まぁ、そんなことはわかってるんだろうけど(^^;。
10:19:34 kinneko> twitterでつぶやくにしても、helpがほしい時は、希望と
現在の症状を明確にしないと、誰も助けられない。
10:20:52 wtnabe< @kinneko mjsk. 自宅でも文句は言ってたはずなんですけど、
なぜかその当時のつぶやきにはそんな記述ないんですよね。
10:21:58 wtnabe< @kinneko もしかすると自宅Macはあらゆるログイン情報を
keychain に残さない漢仕様なのかもしれません。そんな気もしてきました。
10:25:20 wtnabe< ハナからあり得ないと決め込んで可能性を狭めていた自分
の問題だったのかもしれない。やっぱりオレのバカバカバカ。
10:25:34 kinneko> @wtnabe まさか、まぢ独り言モードだったとか? Tw
10:26:14 wtnabe< @kinneko twitter のつぶやきと区別ついてない可能性はあ
りますwww
10:28:35 kinneko> @wtnabe twitterを馬鹿にしてはいけないのだ。けっこう
いろいろ助けられてる。

twitter をバカにはしていないけど、自分が気にかけてるほど周りは自分を気に掛けていない、というのが現実かな。まーだいたいいつもそう。そんなもんです…。ありがとうございます、kinneko さん。

まぁ要するに ssh-agent を無効にしたかったんです。使ってないんでこんな設定があることも知らなかった。

agent を使うのっていっとき流行ったように記憶してるんだけど、なんかメモリ内にやばい情報がずっと居座ってる感じがして気持ち悪くていやなんですよね。ハイバネーションしちゃうとディスクからもその情報が抜けるとか聞いたこともあるし、ControlMaster で session の使い回しをすれば最初の一回だけパスフレーズを入力するだけでオッケーなので、特に agent の必要性も感じないし。

というわけで .zshrc に

unset SSH_AUTH_SOCK

で解決しましたとさ。

21:16:11 wtnabe< うーん。やっぱ自宅 Mac との違いはよく分からん。もう面
倒なので zshrc で行くことにする。

ほんと、以前はどうやって無効にしたんだろ。

Tags: OSX

_ git bundle 初体験

ついでにこっちも twitter のログを貼ってみる。

19:45:30 wtnabe< bundle はそれ自身もまたサブコマンドを取るのか
20:05:52 wtnabe< 分散バージョン管理システムの bundle ファイルってどん
な拡張子にするもんなんだろう?
21:43:34 wtnabe< git bundle create したものを展開するのは git bundle
unbundle ではなく git pull か?
21:52:03 wtnabe< git clone でもなんでもいいのか。git pull なら事前に
git init が必要だし、clone なら何もしなくていい。パスの指定にだけ気を
つければ(たぶん相対パスはNG)

man によるとこのように書かれていて、

NAME
      git-bundle - Move objects and refs by archive

SYNOPSIS
          git bundle create <file> <git-rev-list args>
          git bundle verify <file>
          git bundle list-heads <file> [refname...]
          git bundle unbundle <file> [refname...]

すっかり bundle create で作ったファイルは unbundle するものと思っていたんだけど、どうも違ったらしいというか、自分の場合は以下の方法で目的を達成できた。

$ git bundle create /PATH/TO/BUNDLE_FILE HEAD

(bundleファイルを持ち運ぶ)

git リポジトリ内で

$ git pull /PATH/TO/BUNDLE_FILE

あるいはまっさらのディレクトリで

$ git clone /PATH/TO/BUNDLE_FILE

こんな感じで使うものなのかな?

※ pull がうまくいかないときは checkout も試してみるといいよ!

22日の twitter log より。

あと一気に git pull できなくても fetch すると FETCH_HEAD に保存されるっぽいので、これをもとに checkout -f や merge なんかがじっくり作業できるのはいいなと思った。

Tags: Git

2009-01-21 [長年日記]

_ カレントディレクトリの php.ini は勝手に読み込まれる

PHP、またか。

php-cli は -c オプションで ini ファイルを指定することができる。

$ php -h
Usage: php [options] [-f] <file> [--] [args...]
       php [options] -r <code> [--] [args...]
       php [options] [-B <begin_code>] -R <code> [-E <end_code>] [--] [args...]
       php [options] [-B <begin_code>] -F <file> [-E <end_code>] [--] [args...]
       php [options] -- [args...]
       php [options] -a

  -a               Run interactively
  -c <path>|<file> Look for php.ini file in this directory
  -n               No php.ini file will be used
...

まぁこれは知ってたんだけど、今日ビックリしたのは

-c で指定しなくてもカレントディレクトリの php.ini ファイルは勝手に読み込まれてしまう

こと。

最近、PHP のテストをよく cli でやっている*1んだけど、その関係で環境やサイトごとにまず ini ファイルを生成して、それを -c で読み込むようにしていた。Web ベースで言えば .htaccess を用意して切り替えるようなイメージ。

しかし、どうも意図しない設定変更がどこかで起きているケースが頻発して訳が分からなくなってしまった。

よくよく追いかけると -c で指定していないカレントディレクトリの php.ini ファイルの内容が反映されていた。これは試しに置いていただけで全然使うつもりがなく、

php -c ../../php.ini -f testfile.php

みたいに実行していたんだけど、カレントディレクトリのもので上書きされてどう逆立ちしてもテストが通らない状態になっていた。

仕方ないので生成する ini ファイルは

php.my.ini

という名前に変更した。なんだかなぁ。

Tags: PHP

*1 HTTP でパラメータを与えなくてもその部分がちゃんと抽象化されていればユニットテストは十分できる。このやり方の方が余計な仕事をやっている Apache や拡張だらけで重たくなったブラウザを使わずにテストできて速い。速さは正義だ。


2009-01-23 [長年日記]

_ Emacs 21 でも C-x RET r したい

今日やったのはこんな感じ。

09:34:32 wtnabe< emacs 21 でも C-x RET r で revert-buffer を呼び出した
い
09:59:25 wtnabe< (global-set-key (kbd "C-x RET r") 'revert-buffer) か。
ぼくにもできたよ! さんきゅー @odz !
10:00:09 wtnabe< kbd 関数を使うのはめちゃめちゃ読みやすくてよいなぁ。

cf. キーバインドの指定方法 - odz buffer

正確には 22 の C-x RET r とまったく同じ動きではないんだけど、それは仕方ない。

Tags: Emacs

2009-01-25 [長年日記]

_ ケータイを talby から re へ変更

結構前から壊れていた talby. いよいよ使いものにならないので雪の中、機種変にお出かけ。

結局ソニエリのフルチェンケータイ re のスリークシルバーってやつにした。いちばんメタルメタルしててかっこいいので。もう最近は新しい機能とか全然興味なくて、素材にしかこだわりがない。もっとメタル素材を採用した携帯が増えないかな。

フルチェンケータイ re | 携帯電話 | KDDI株式会社

ま、これは表のガワだけが金属で裏はプラッチックなので、やっぱりそのうちハゲハゲになるんだろうけど。

ちなみに1月いっぱいのキャンペーンに乗っかったので、端末代は1万円ほどお得になっている。

以下感想。

  • Web 周りの動作が速い(WINだから?でも処理速度も速くなってるような)
  • しかし基本の動作が遅い
  • フォントが見にくい
  • 持ちにくい
  • ボタンを押した感触が悪い

えーと。基本的にはあんまりいいとこない。機能で選ぶタイプの人にはお勧めしないな。

Tags: 日々

2009-01-26 [長年日記]

_ git では空ディレクトリは add できない

少なくとも git 1.6.0.2 時点では。

いや、知ってたんだ。知ってたんだよ。知っててもやっぱハマるね。ハマらないと覚えないわコレは。

というかね。

空ディレクトリは add できないって制限なんだから、そういうメッセージをちゃんと出せよ!

できないことが悪いとは言わないけど、インターフェイスとしてなってないと思うぞ。

Tags: Git

2009-01-27 [長年日記]

_ Capistrano の :ssh_options と Net::SSH

また twitter の log から。

00:11:35 wtnabe< それ以前に :ssh_options の設定方法をミスっていたらし
い。:config => true を外してもそのまま認証できた。。。
00:11:43 wtnabe< 昼間のオレはバカすぎたということか。
00:12:18 wtnabe< オプションの与え方は set :ssh_options,
00:13:03 wtnabe< オプションの与え方は set :ssh_options, {} で、何がセッ
トできるかは net-ssh の ssh.rb を読むと書いてある。

lib/capistrano/ssh.rb

まず Capistrano の ssh 関係のファイルを読んで行くと以下のような記述が見つかる。

   # If an :ssh_options key exists in +options+, it is passed to the Net::SSH
   # constructor. Values in +options+ are then merged into it, and any
   # connection information in +server+ is added last, so that +server+ info
   # takes precedence over +options+, which takes precendence over ssh_options.
   def self.connect(server, options={})
     connection_strategy(server, options) do |host, user, connection_options|
       connection = Net::SSH.start(host, user, connection_options)
       Server.apply_to(connection, server)
     end
   end

ということで :ssh_options に設定するらしい。何が与えられるかというと、Net::SSH.start を読めばいいのかな。

lib/net/ssh.rb

   def self.start(host, user, options={}, &block)
     invalid_options = options.keys - VALID_OPTIONS
     if invalid_options.any?
       raise ArgumentError, "invalid option(s): #{invalid_options.join(', ')}"
     end

この上の start メソッドのコメントにオプションというオプションがズラーっと書いてある。ここ読めば全部分かります。あまりの量で引用の範囲を明らかに超えそうなので控えてしまいました。

なるほどな。いやこの Net::SSH ってホントすごいな。


2009-01-28 [長年日記]

_ rsync の読む .cvsignore は source DIR のもの

rsync は -C オプションで CVS ディレクトリや .cvsignore に書かれているものなど CVS と同じルールで、コピーの際にファイル、ディレクトリ群を無視することができる。

なんだけど、この .cvsignore の動作がよく分かっていなかったようで、ちゃんと無視されずに転送されてしまうことがあった。

man rsync より

             then,  files  listed in a $HOME/.cvsignore are added to the list
             and any files listed in the CVSIGNORE environment variable  (all
             cvsignore names are delimited by whitespace).

             Finally, any file is ignored if it is in the same directory as a
             .cvsignore file and matches one of the patterns listed  therein.
             Unlike rsync's filter/exclude files, these patterns are split on
             whitespace.  See the cvs(1) manual for more information.

えーと。

  • ホームディレクトリの .cvsignore
  • コピー対象となっているディレクトリにある .cvsignore

の中に記されているファイル、ディレクトリ群が exclude される。

ってことかな?

Tags: Rsync

2009-01-29 [長年日記]

_ Camino や Safari の日本語そのまま URL をちゃんとエスケープして再利用する

例によって twitter のログから。

09:42:40 wtnabe< Safari も Camino もそうなんだけど、アドレスに日本語を
そのまま表示するのはいいんだけど、コピーしたときにも日本語のままっての
はちょっとやめてくんないかなぁ。
09:51:13 wtnabe< それとも自分の使う他のツール全部に日本語を含むURLをそ
のまま解釈する能力を求めた方がいいのか。いやー逆だよなぁ。
09:51:59 wtnabe< あくまで表示は表示であって、データとしては urlencode
されたものが正しい URL なんだし。
10:08:46 wtnabe< で、webkit.rb が呼び出せればいんじゃね?とも思ったが、
そんなことにかまけている時間はないのであった。
10:17:40 wtnabe< あ、URI.escape() だけでいいのか。でも terminal からコ
ピペすると改行コードが入ってむにゃむにゃ。
10:19:01 wtnabe< 改行コードが入ったり入らなかったりするんだった。クリッ
プボードに入ればいいのかしら。
10:20:02 wtnabe< rubycocoa から clipboard に投げればいいのか。どうやんだ?
10:33:09 wtnabe< てゆーか pbcopy でよかった。OSX++
10:33:49 wtnabe< てことは ruby -e 'require "uri"; puts URI.escape(
"URI" )' | pbcopy でおけ。
10:35:38 wtnabe< とりあえずここまで。alias に入れておきたいが、引数の取
り方が分からないのでそれはまた次回。

ということで

ruby -e 'require "uri"; puts URI.escape( "URI" )' | pbcopy

です。ただし、10.5 標準の screen 上ではこれは使えないらしい。MacPorts や Fink の screen だとイケる。

cf.

MacPortsのscreenではpbcopyが動く件 - moroの日記

と思ったら favicon をドラッグするといけるという情報が。なるほどなぁ。Safari の BK ですか。

Tags: OSX Ruby Screen

2009-01-30 [長年日記]

_ URIベース pear package を管理しやすくする Capistrano レシピ

09:09:35 wtnabe< 思いついたけど pear channel server なくても rake ベー
スで管理すれば upgrade も downgrade も自在にできそうだな。
10:02:28 wtnabe< terminal で引ける xpath cheat sheet ってないかな
10:11:13 wtnabe< いつも XPath で正規表現マッチさせる方法が分からなくな
るな。いい加減学習しろよ、オレ。
10:17:31 wtnabe< @checkela XPather のヘルプをいつも使ってるんだけど、
正規表現そのものの説明はあるのにどうやってマッチさせるのか分からないん
すよw
10:55:35 wtnabe< 違うのかな、これ。正規表現マッチの機能はJavaScript の
機能なのか?
11:10:35 wtnabe< 最終的には Hpricot が対応していませんのワナ。何度とな
く同じことをやっている気がする。
11:18:57 wtnabe< jQuery と Hpricot を混同している
11:25:24 wtnabe< Array.reject の反対ってなんだ
11:31:55 wtnabe< map と compact を組み合わせればなんとかなるのか
11:35:41 wtnabe< ほんと、どんどん Ruby を使い始めた初期の頃には忌み嫌っ
ていた書き方に近づいて行くな
11:37:11 wtnabe< Apache のソートって前からバージョン番号をそれっぽく解
釈してくれる形だっけ。
11:40:06 wtnabe< お、オプションがあるな。いつからか V=1 がデフォルトに
なったってことかな。
11:45:41 wtnabe< ということはソートは Apache に任せるのがいいな
12:13:44 finalfusion> @wtnabe 人は、変わっていくのね…(笑)
12:16:18 wtnabe< @finalfusion ですねぇ(笑) そっちの方が短いし楽だし
Ruby っぽいんですよね。コードによって教育されたとも言えるかなぁ。
17:17:41 wtnabe< 朝言ってた pear package 管理の Rakefile できた。
packaging と deploy は自動化できてないけど、upgrade, downgrade は引き
継ぎしやすくなった。

ということでできた。

Rake で作り始めたんだけど設定をコードから追い出すために最後の最後で Capistrano にした。なので sudo を `` の中で生で叩いているとかあちこちおかしい。role とかセットしていけば関連するサーバ群の package を一気に upgrade とかできてウマーな気がする。

やっていることは実に単純で Apache の mod_autoindex の機能でパッケージファイルをバージョン番号順に整列させて、取得した HTML から必要な部分だけ scrape して利用する。また現在のインストール済みバージョンを pear コマンドから取得してこれを比較して upgrade や downgrade を行っている。

つまりパッケージを Apache の公開領域*1に置いてないと意味ないっす。


以下、1月31日の思いつき。

07:12:04 wtnabe< 昨日やってた URI ベースの pear package の install,
uninstall, upgrade, downgrade を支援する仕組みは、考えたらいわゆるダウ
ンロードページのスクレイプとアーカイブの展開さえできれば pear package
以外にも通用するような気がしてきた。
07:12:40 wtnabe< 問題は現在インストールしてあるバージョンを取得する汎
用の方法がないことと、ダウンロードページからのリンクがきれいにバージョ
ン番号順に並んでいるかどうか、かな?
07:18:02 wtnabe< まぁとりあえずは汎用にならなくてもよいわけで、pear
package にしないくせにリポジトリにちゃんと tag 打ってくれないようなア
プリ、ライブラリの管理も以前考えていたよりはもしかするとスマートにでき
るかもしれないな

*1 アクセス制限は自由にしてもらえばいいとして