トップ 最新 追記

2008-03-02 [長年日記]

_ リベンジシリーズ第2弾 J.B.ハロルドの事件簿

TSUTAYA で見つけて衝動買い。

当時残り1人か2人くらい登場人物に会うことができず解けなかった本格推理アドベンチャーですよ! 捜査資料を自分で紙のノートのうえに作って行く過程がまた楽しくて非常に面白かった、そして悔しかった思い出のあるゲームだ。

風呂の友が増えた。(レイトン教授は残ったナゾのレベルが高くなりすぎてコンプリートできないまま挫折している。)

……。

あれ? 解けなかったのってマンハッタン・レクイエムじゃね? あれ? 全然違うゲーム買った?

Tags: 日々

2008-03-07 [長年日記]

_ run-parts(periodic)で mail の送信先を変更する

いやなんかね。cron の管理が面倒で面倒で。とにかく登場するファイルの数を減らしたいわけです。

crontabファイルとスクリプトの氾濫

cron の設定管理は意外に難しい。crontab ファイル一つにすべて書くと見にくくなるし、だからと言って Linux で cron.d/ 以下に分けて書くと何時にどういうジョブが走るのか、全体の見通しが悪くなる。システム全体に関わるジョブを実行ユーザーが root じゃないからという理由で crontab コマンドを使って設定するなんてもってのほか。

また、cron.d/ 方式は crontab と実際に実行するスクリプトがそれぞれ別個に増えていく方式なので、煩雑さに拍車がかかる。

というかそもそも一つ一つのスクリプトについていちいち細かく実行時間を設定したくない。

解決案 run-parts(periodic) の活用

ではどうするのがよいのだろうと思い悩んだが、

  • 特別負荷が高くなく
  • 順番に依存しない処理

であれば、daily, weekly, monthly のように run-parts(periodic) を活用するのがよいように思う。この方法は

あるディレクトリ以下に実行するスクリプトを直接置くだけ*1

という気軽さがあるし、crontab ファイルは増えないので実行スクリプトの管理だけに集中することができる。

run-parts(periodic)活用時の MAILTO 問題

crontab は独自に MAILTO や HOME などの変数を解釈してくれるし、スクリプトを実行するユーザーも個別に指定できる。これを活用することで permission の問題に対応したり結果の送信先を柔軟に変更できるのだが、run-parts(periodic) を利用した場合は残念ながら cron が run-parts を実行するユーザーが誰であるかに関係なく root 宛に mail が届く。*2

この送信先を変更したければ

run-parts DIR | sendmail ADDR

として明示的にメールの送信先を変更するしかないみたい。

またこの方法で変更した場合に届くメールは当然 cron からの通知ではないので subject が自動で設定されたりはしない。man sendmail.

cf.

*1 ただしファイル名に注意。ルールに合わないファイル名のスクリプトは無視される。

*2 みたい。今回は run-parts でしか試してないけど。


2008-03-09 [長年日記]

_ クライアントサイドで dnsbl を使った URL フィルタリングを自由に選べたら便利かも

特に PHP の調べものをしていてたまらなく腹が立つことに、マニュアルを丸々そのまま公開しているサイトが意外に多いという事実があります。

これね。邪魔なだけ。

本家と同じかそれより古い情報が大量に存在しているだけでメリットがない。例えばある関数にどこかのバージョンでバグがあるか調べようとしても、とにかくこのマニュアルばかり引っかかって欲しい情報になかなかたどり着けない。本家の php.net にしかマニュアルがなければ検索のキーワードに

-php.net

と書き足すだけで除外できるのに、劣化コピーが大量にあるおかげでこの方法が通用しない。

そこで除外したい URL の情報をどこかのサーバに dnsbl で置いて、特定の内容の検索を行いたいときにユーザーがどの dnsbl を利用するか指定して利用できたら便利かなと。URLフィルタリングとしては有害情報なんかと同じ発想。(ある意味本当に有害だし。)

dnsbl と言っているのは、共同でフィルタリングしたい URL を管理しようと思ったら dnsbl の方法がいいのかなと思っただけで dnsbl でなきゃいけないという理由はないです。Greasemonkey とかだけでも似たようなことはたぶんできるんだけど、随時アップデートされる URL リストの反映が面倒になるので、やっぱ dnsbl がいいのかなと。例えば上のような場合は

phpman_copys

みたいなリストにコピーを公開している URL の情報があれば、それを指定して検索*1したときに自動的に余計なマニュアルを除外してくれるようなイメージ。

あれか、ブラウザとは別にプロキシ立ててる人はそっちで dnsbl を利用できるようにすればいいのか。あーそうすれば Greasemonkey 依存にならないということで Camino 使いの自分はプロキシで解決した方がいいのかもしれない。dnsbl のメンテとプロキシの方でリストを指定する UI をどうやってまとめるのかが面倒くさそうだけど、とりあえず何か一つクライアントサイドで利用できるプロキシをマスターした方がいいのかな。

*1 この辺の UI をどうやって実現するかは考えてません。


2008-03-12 [長年日記]

_ Fastladder の rating を加点方式で使い始めた

昨日?から Fastladder の rating を使い始めた。Fastladder を使い始めたのが去年の4月なのでおよそ10ヶ月、フォルダ分けだけで凌いできたことになる。しかしいよいよ限界かなと思ったので試しに rating を使ってみたのだが、これはちょっと迷う。というのも、自分の感覚では「『通常のレート』があって、よりよく目にしたい feed はプラスに、あまり目にしなくていい feed はマイナスに設定するもの」ということを無意識に連想したのだけど、feed の登録の段階でデフォルトはゼロだからだ。

するとこちらの「(無意識に)想定している通常のレート」を実現するためには、いったんすべての feed に対してレート設定作業を施さないといけない。

面倒くさい。

ということでゼロベースでよりよく目にしたい feed をとりあえず3を上限に設定し始めた(その方が設定する feed の数が少なくて済むから)。

最も高い rate を獲得したのはセキュリティアドバイザリ系やセキュリティ関係のニュース、そして普段自分の使っているツールの更新情報だった。

ここで「あーなるほど、オレってこういう人間なのか」という認識を新たにした。これホント。こんな形で振り返りを行うとは思わなかった。

で。今朝、いつものように feed の消化をしようと思い rate ごとに分かれた feed を片っ端から開いていったのだが、やたらと速く終了した。「おぉこれはすごい」と思ったんだけど、それもそのはず、実はほとんどの feed が rate 0 のままで、

要するにほとんどの feed を無視しただけ

というひどい有り様。気づけよ、オレ。ということで rate の見直し。今度は

たくさん item があっても消化できる feed の rate を高く、item が少なくても消化しにくい feed の rate を低くする

という方針にした。

例えば日本語の通常のニュース。これは別に item が多くてもそれなりの速度で捌けるし、いざとなったら他のメディアからも補完できるので、溜まりすぎたら問答無用で purge するという行動に出ちゃえる。次に日本語の IT 系のニュース。これは他のメディアでの補完は難しいけど、同じ要領でそれなりの速度で処理できる。

しかし英語ものは数がたくさんあると無理。これは rate を下げる。短くてもそれなりに消化にホネが折れるので優先順位を落としてしまうことで心理的な負担を下げる。あとは「処理しにくいサイト」も rate を下げた。自分は最速ネットウォッチャーではないので、未だに生のサイトを直接見る機会が多い。このとき、重たいサイトとか広告ばかりで目に優しくないサイトは「処理しにくい」ので rate を低くした。具体的には Gizmodo Japan, MOONGIFT, MarkeZine 辺り。あと読み応えのあるものとして高木せんせの日記。これらは斜め読み、飛ばし読みしにくいのであまり目にしなくてよいように設定した。

結果、どういうわけか優先度が高、中、低、の3段階*1くらいで割とうまい具合に分けることができた。まだもうちょっと見直しが必要そうだけど、見るべき feed が同じ優先度で一つの(擬似)フォルダにまとまっていると、Fastladder のショートカットキーでの閲覧時の先読みを完全に活かすことができるので、より速く feed を捌けるという効果は確認できた。なるほどね、内容によるフォルダ分けより rating の方が有効なんだね。逆に言うと最初から rate を意識したフォルダ分けにすれば 0 〜 5 だけでなくもっと細かく分けることももっと大雑把に分けることも可能だけどね。

*1 というか正確には読み手の負荷が低、中、高の3段階


2008-03-18 [長年日記]

_ ctags -x で定義一覧表

twitter 上で ctags, GLOBAL, cscope と、メソッドなどの定義情報を生成するツールの話がほんの一部で盛り上がっていたので、試しに普段 cron で回してるだけで使っていない(ひどい)ctags のオプションを調べてみた。

すると -x というやつが「読む」ための出力を得るには便利そう。

-x   Print a tabular cross reference file to standard output.

結果、

/sw/lib/ruby/1.8$ ctags -R -x .
...
GServer          class        82 gserver.rb       class GServer
serve            method       86 gserver.rb       def serve(io)
stop             singleton method   92 gserver.rb       def GServer.stop(port, host = DEFAULT_HOST)
in_service?      singleton method   98 gserver.rb       def GServer.in_service?(port, host = DEFAULT_HOST)
stop             method      103 gserver.rb       def stop
stopped?         method      111 gserver.rb       def stopped?
shutdown         method      115 gserver.rb       def shutdown
connections      method      119 gserver.rb       def connections
join             method      123 gserver.rb       def join
connecting       method      130 gserver.rb       def connecting(client)
disconnecting    method      137 gserver.rb       def disconnecting(clientPort)
starting         method      144 gserver.rb       def starting()
stopping         method      148 gserver.rb       def stopping()
error            method      154 gserver.rb       def error(detail)
log              method      158 gserver.rb       def log(msg)
initialize       method      167 gserver.rb       def initialize(port, host = DEFAULT_HOST, maxConnections = 4,
start            method      181 gserver.rb       def start(maxConnections = -1)
^L
gserver.rb,0

みたいな感じ*1。フォーマットは

定義されたキーワード 種別 行番号 ファイル名 行の内容

かな? この連続のあと

^L
ファイル名,0

ってくるのがちょっと意味がよく分からないけど。

ただこれ、人間の目ではテーブルに見えるけど、カラムの区切りがスペースなので、行の中身にスペースを使っていると(というか普通使うよね)カラムの区切りのスペースと区別できなくなっちゃうのがちょっと残念。awk でもいいけど join() がないので Ruby で、

ruby -n -e 'puts $_.chomp.split( " ", 5 ).join( "\t" )'

こんな感じでタブ区切りのテーブルにできる。中にタブコードを使っていないなら、この方法で作ったファイルを拡張子 csv とかで保存すると Excel とかで見やすくなる。

タブとスペースが混在している場合は御愁傷様。諦めて RFC 4180 に従って吐き出すのがいいかな? そういうライブラリは使い慣れておくべきかも。

試した限りでは ctags, etags, exuberant ctags どれでもできそう。

あ! "singleton method" なんてスペース入りの種別があるじゃないか。なんだよー。勘弁してよー。行番号の前にホワイトスペース以外のカタマリが2つの場合と3つの場合があるのか。うーぬぬぬ。

まぁ気が向いたらまた今度。

*1 サンプルは Fink で入れた Ruby の GServer クラス


2008-03-19 [長年日記]

_ Komodo Edit を触ってみた

特に理由はないんだけど Komodo IDE のフリー版のような位置づけの Komodo Edit というものが出ていたのでちょっとだけ試してみた。

ActiveState - Free the dragon! - Dynamic Tools for Dynamic Languages

以下 Komodo Edit 4.3.0 Mac 版の感想。

いいなと思った点

  • eclipse より断然軽い
  • Emacs キーバインドが eclipse よりマシな気がするけど気のせいかもしれない。C-x 2 でウィンドウ分割できるように読めるんだけど実際にはできない。
  • コードの折りたたみがごちゃごちゃ設定しなくてもワンクリックでできる
  • 結構いろんな言語に対応している
  • バックグラウンドで勝手に構文チェックとかしてくれる
  • コードスニペット機能(再利用しそうな断片を保存しておける)
  • 選択範囲を外部コマンドに投げたり結果を受け取ったりできる
  • FTP と SSH に対応(なんで WebDAV に対応してないんだろう)

試してみてないけど気になってる良い点

DOM インスペクタとかあるし、URL のマッピング機能があるので Web のフロントエンドの開発にも便利なのかも。

別に気にならない点

  • メニューは英語

気になる悪い点

  • Emacs キーバインドで Meta キーを Command にしか割り当てられない
  • カーソルのブリンクを止められない
  • Extended Unix Code を扱えない
    • ShiftJIS はイケた
    • でも ShiftJIS の diff が使いものにならない(UTF-8はイケた)
  • Diff の UI がよくない。タブに開いているファイル同士をサクっと比較とかできればいいのに。
  • CVS にも Subversion にも対応してなくてローカルヒストリ機能もない
  • コマンドを投げる際に(MacOSX版は)/bin/sh を呼ぶので、せっかく整えてある便利環境が全然活かされない
  • 外部コマンドの出力に日本語が入っているとうまく処理できないっぽい

なんか文句ばっか言ってるな。

まぁ実際日本語を扱うには厳しい点がいくつもあるので、普通の人にはオススメしにくいなぁというのが正直なところではあるけれども、外部コマンドなんて使わなくて UTF-8 しか使わないっていうならそこそこ幸せになれるかもしれない。

[2009-09-04 追記]

Windows だと notepad++ の方がいい気がする。Mac では UTF しか使わないなら CotEditor 以上 eclipse 未満的な感じで使えるかも。YAML と diff に対応しているのが個人的には嬉しいしオススメポイント。

v5 が出てたので試してみた。iso-2022-jp, shift_jis, euc-kr には対応してるけど euc-jp には対応していないorz なにそれ。


2008-03-29 [長年日記]

_ はーしんど

区切りまでもう少し。

思ったより手こずったけど、なんとかなるところまでこぎつけた。

やっぱり本当に自動化&単純化大事と思った。

そのうち何が起きていたか書けると思うけど、しばらくは休みたい。

あー。

どなたかそのうち CruiseControl.rb 勉強会と Puppet 勉強会 と LVS 勉強会をやりませんか。当方まだどれも分かってないですけど。好きな OSは FreeBSD ですけど ipvs も keepalived も動くみたいです。あと OpenAFS に堕落させてくれる人と Lisp に洗脳してくれる人も募集してます。

個人的には OpenAFS をまずモノにしてしまいたい。

……。

とりあえず疲れた。

Tags: 日々