2007-01-01 [長年日記]
_ Spyc 0.2.5
SourceForge.net: New Spyc (0.2.5) for a New Year!
だそうで。PHP で YAML を扱う人は要チェック。って、まずお前がチェックしろってか。
CHANGES を読む限りはなんかすごく速くなってそうな予感。わくわく。
_ kipmsg だそうで
注目すべきは libipmsg を作っている点かしら。これで各プラットフォーム向けにバラバラにできてる感のあった IP messenger が扱いやすくなる予感。なにげに Win版v2 互換度がいちばん高いものなんじゃなかろうか。
動かしてみてないけど。
2007-01-03 [長年日記]
_ メールってやっぱめんどくさい
書くのが面倒とか読むのが面倒とかそういう話ではなくて。システムとして面倒だなぁと。
自宅サーバに imap でも立てようかと思いあれこれ調べてみているんだけど、ISP からのメールの取得をどうしようとか思ってるわけです。有名なのは fetchmail + procmail のようですが、どちらもそれなりに不評の様子。そこで getmail + maildrop にすればいいのか? とも思ったのですが、よく分からないままとりあえず動かすっつーのはちょっとメールではやりたくないので、慎重にあっちこっちのドキュメントを読み漁っています。
※ getmail はメールを取ってくるだけなのにわざわざ python が動くっつーのもちょっといや。
すると出くるんだわ知らない agent、知らないプロトコルが次々と。そうかー、おれってこんなにメールのこと分かってなかったんだなぁ。奥が深い。奥が深いよ。
まぁでもようやく不勉強な私は伽藍とバザールにたどり着いたのでした。そうかこれか。じゃあ読んどこ。
[2007-01-06 追記]fetchmail はめっちゃ自画自賛してる割にあれこれ問題がありそげ。最近のメンテナは bug fix と古い機能の削除に一生懸命な様子。getmail + dropmail については getmail + maildrop は確かに便利そう でもうちょっと掘り下げています。
cf.
2007-01-04 [長年日記]
_ Diigolet が使えないと困る
Camino なので bookmarklet である Diigolet で post してるのですが、以下のケースでは Diigolet がまともに動きません。
- frame のページ
- text/plain のページ
このリストを見て、DOM で HTML 文書全体を相手にあれこれやってみたことのある人は気づいたかと思いますが、文書の中に body 要素がないためにこうした問題が起きます*1。text/plain の場合はちょっとどうしようもないですが、frame についてはちゃんと考えれば対応可能です。もうちょっと頑張ってほしかったなぁ。
あと、bookmarklet などで post できなかったとき、Diigo のサイト上で bookmark を追加することになるのですが、この操作性がすこぶる悪い。というかどこから追加できるのかぱっと見分からない。あれだなぁ、こういうケースを体験するとユーザビリティって大事だなと思いますな。まぁごく単純な HTML の使い方の問題でしかないんだけど。
※ Diigo は本来もっと目立つべきアクションが select の中に埋もれていたり、form の ボタンを CSS で通常のリンクのように見せかけているために Safari や Camino でものすごく間抜けに見えたり、ちょっと検証不足じゃねーの?と思わせるところがちょこちょこある。今さらながら del.icio.us はよくできてる。
*1 body要素の中にレイヤーを作って overlay させているので。
2007-01-05 [長年日記]
_ FDclone と Emacs の dired で cp
今日気がついた。この2つは cp の際、
- FDclone
- -p なし
- dired
- -p あり
で動作する。えーと要するに自分の目的としての違いは dired であれば timestamp が維持される。今度から dired にしよう。
※ つかまぁ、そもそも FDclone の出番がそんなに多いわけじゃないんだけど、たまに shell からじゃあ作業しにくいケースがあるのです。
2007-01-06 [長年日記]
_ getmail + maildrop は確かに便利そう
この間の続き。以下はドキュメントを読んだ時点での感想。(まだ動かしてない)
getmail は MDA 要らずで pop3/imap4, mbox/Maildir 対応
取得プロトコルは置いとくとして。
まぁ通常の Unix 系のホストならローカルメール配送用のプログラムが何かしら動いているのでこれはたいしたメリットにはならないんだけど、特定用途に特化しているとか、わけあって cygwin 上で動かしますとか、そういう場合に便利そう。独自に filter の呼び出しができるので振り分けとか意外と細かいことができると思う。
ただし転送したい場合はたぶん MDA が必要なので、あれもこれもやりたいという場合には最初から MDA と組み合わせてそっちで行うべきなんだろう。
Python が立ち上がるのはどうかとも思ったが、逆に Python が動けばよいのでプラットフォームの自由度は上がっている気がする。細かい処理はあとで考えるとしてとりあえずメールを取ってくるだけに集中するならこれさえあれば済む、というのはなかなか魅力かも。
maildrop は記述が Perl っぽい
お次は MDA の maildrop. さかんに一時ファイルを作ってメモリを節約してますよ、と謳っている。
好き嫌いは分かれると思うが、procmail の書き方よりはまだ Perl っぽい方が楽な気がする。PCRE を使っているので条件を記述する際に悩まなくていいのが嬉しい。(謎のオレ正規表現とか実装されちゃうと仕様がよく分からなくてつらいって意味。)
フィルタとしては Lens も捨てがたい
それは Ruby で書かれているので簡単に POP before SMTP 対応や submission 対応にできるから。これ、何が大切かと言うと、forward の自由度が上がるってこと。
いやね、監視したいサーバが内部向けのサーバで、自分たちの自由にできる環境に固定 IP で逆引きもできる SMTP サーバが立てられない場合とかあるでしょ?*1 そういう場合、システムからのアラートメールを自分(携帯とか)宛に転送しようと思っても最近は outbound port25 block で submission 使ってね、なわけですよ。さてどうする?と。こんなとき、Lens の smtp の部分をちょこっと書き換えれば ok っていうのはかなり便利だと思うんだな。
ところで今週末は時間が取れないから作業はしばらく先になっちゃうんだなぁ。残念。
SMTPクライアント
[2007-02-08 追記]
Lens 改造にこだわらなくても LightWeightSmtpClients - mutt-j wiki などの情報をもとに SMTP クライアントを利用すればよさげ。見た感じ msmtp が
- システムワイドの設定とユーザー独自の設定の二段構えにできる
- ファイルにも syslog にもログを吐ける
など、取り回しよさげな雰囲気。
以前は SMTP サーバが relay の際に SMTP-Auth で認証を受ける SMTP クライアントになってくれれば、内部に relay 用のサーバを一つ立てるだけで済むのにと思っていたんだけど*2、考えたら「その際、認証に利用するアカウントは誰のものを使うんだ?」という問題もあるのよね。まぁシステム丸ごと管理してるから外部に投げたいんじゃいということであれば、組織の管理用アカウントを使えばいいのかなとも思うところだけれども*3。
ユーザー独自の設定つっても root 権限持ってる人はその気になればパスワード覗き見できるので、それもどうだという感じはあるかもしれないけど、その辺は個人アカウントと管理者アカウントを分けるとか運用でカバーしろということでいいかな。用途が用途だけに生パスワードを書かなきゃならないかどうかなんてあんまり気にならないな。
cf.
2007-01-07 [長年日記]
_ 爆弾低気圧直撃食らいました
電車が1時間半遅れたうえに途中でバスへの乗り換えを余儀なくされました。しかしちょっと時間に制限のある移動だったので代行バスを捨ててタクシーへ。初めてタクシーで高速に乗ったよー。いやー高速代なんて全然メじゃないくらい高かったよー T_T (※ のだめの実家に向かう千秋が使ったタクシー代より高いはず)
2007-01-09 [長年日記]
_ iPhone かぁ
iPhoneを動かしているムービーや写真いろいろ - GIGAZINE
この程度のことなら日本だとW-ZERO3シリーズで実現可能な気もしないでもない。
まぁねぇ。画面も VGA だし。(漢字文化圏ではやっぱ VGA はほしい。)
iPhone では OSX が動くってことであれもこれもできるんじゃないのかなぁと思うけれど、そんなに自由は与えてもらえないんだろな。セキュリティ対策とか考えるの面倒だし、SHARP とは設計思想が違うだろうし。SHARP のあえてソフトキーボードでないところ、VGA を積んでくるところはやはりかなりグッとくるけれど、キー入力を伴わない部分でのデフォルトの見た目や使い勝手はやっぱこっちが上のような気がする。
見た目大事。デフォルト大事。もうね、カスタマイズとか基本的にどうでもいいから。何もしないで扱いやすい状態が手に入るならその方が嬉しいもの。安定感についてはたぶんどっちもどっちだろうなー。OSX 自体はすこぶる安定してるけど、組み込みでの実績ってあるんだっけ? ないよね?
と、普段ガジェット系の話を書くことはまずないんだけど、最近実は、ノートよりも小さくて寝ながらとかどこでも使えるデバイスがちょっとほしくて ZERO3 とか調べていたから気になったのでした。田舎は車社会なので両手と目が自由になる移動は少なく、ハイパーな携帯としてのこの手のガジェットはほとんど利用価値がないんだけど、無線LAN があれば家の中とかでは自由だなーと。こう、堕落した感じでね。とりあえず bloglines と del.icio.us とあと iCal と Wiki くらい使えればいいよという、そんな感じ。主要な作業をサーバ上で行えるようにしておけば、本体の方で凝る必要はないんで、あんまりあれもこれもできなくていい。というかそういうカスタマイズは、自分は絶対に面倒くさくて初回以外やらない。もう断言できる。
ただ、Apple 製品は安くならないので、こんだけの値段になっちゃうんだったら MacBook ほしくなるだろなー。どうせたいしたことできないのに iPod の倍くらいの値段になっちゃうのはやっぱたぶん納得できない。まぁ、日本で販売するときに何がどうなってるのかは全然分からないわけだけど。
[2007-01-11 追記]何やらたださんがまだまだだと書いているけど、こういう「思い切った割り切り」という名の、日本の携帯端末好きの目からすると中途半端な仕様になっちゃうのはまぁ Apple なら当然かと思いますよ。サードパーティから OSX 搭載の iPhone コンパチマシンが出るなら話は別だろうけど。というか Windows Mobile ってそんなに困った OS なのか…。これも予想はしていたけども、まぁ iPhone が出れば Microsoft はまたおいしいとこパクってくれる切磋琢磨してくれるだろうし、今後に期待ってことで。
[さらに追記]スラッシュドット ジャパン|iPhone商標侵害でCiscoがAppleを提訴
解決してなかったんだ…。やるなぁ、Apple.
2007-01-10 [長年日記]
_ VMware を使って内部サーバの仮想化を試みる決意をする
例によってまだ実験段階ですが、背景から整理しておきます。
- サーバの仮想化が、新しいサーバを新しい OS でいくつもホストすることではなく、migration をより少ない物理コストで実現するために必要
- 例えばゲストOS には RedHat 7.3 などの古いものがある
- 利用できる物理ホストは x86系
- 利用できる物理ホストのプロセッサは仮想化支援(IntelVT とか)を行ってくれない
ものとします。現段階で情報が十分揃っていてそれなりの速度で動き、手軽に始められそうなのは
- Xen
- VMware Server
なわけですが、今回は
- プロセッサの仮想化支援もなく、古い OS を利用する*1関係上、Xen は手間が増える
- 内部向けのサーバなので VMware のライセンスで十分
ということで VMware を採用しようと考えています。
VMware のライセンスは日本語訳されたものを探して右往左往してしまいましたが、どうやらまったく存在しない模様。しょうがないので飛ばし読みかつ斜め読みしてみたところ
- 内部向けの利用なら ok
- 外部のネットワークを通じていても内部向けなら大丈夫そう
- プロセッサパワーやアプリケーションサービスを売ったりリースしたりしちゃダメ
- ベンチマークを公開したけりゃ VMware のレビューを受けてね、連絡待ってるわん
ということらしい。これなら今回の目的に利用するのは問題ない。
cf. リモートから利用可能なサーバー向け仮想化ソフトウエア:ITpro
*1 幸いカスタマイズ不能なプロプラ OS はないが
2007-01-11 [長年日記]
_ 仮想マシンのディスクの構成で悩む
VMware での仮想化を決意したわけですが、実際にどういう構成で仮想マシンを作るかっつーのがまた悩むところなわけでして。というのも、migration 目的とは言えただの実験サーバとも違うので、あんまり遅くなってもらっちゃ困るのです。お手軽に同一ドライブで仮想ディスクなんてことをするとたぶんちょっとかなりつらいと思うので、ならば物理ディスクを仮想マシンのドライブとして割り当てたらどうか、というところまでは思いつきました。
cf. [ThinkIT] 第2回:ドメインUのI/Oパフォーマンスチェック (1/3)
しかし。
migration の前段階の実験環境は Celeron 850MHz + IDE 40GB という超しょぼい機械。これで物理ディスクをドライブとして割り当てると結構ややこしいことになってしまうのです。
- 同一ドライブの別パーティションから起動しようと思うと、ブートローダは同じものが立ち上がってしまう
- ということは VMware ホストもゲストも同じブートローダが起動する OS を選べと言ってくるので、起動の自動化が難しい(そもそも可能なの?)
というか、マニュアルに
仮想マシンの物理ディスクをホストOSと同じ物理ディスクにインストールすることは絶対に避けてください。
って書いてあるorz*1 ということで、
- とりあえず仮想マシンのブートセクタは仮想ディスク上に置くようにする
- 起動時や通常 read, exec しかしないファイルはこっちに置く
- 書き換えるデータだけ追加した物理ドライブに置く
という構成にしました。まぁ実験段階ですし*2。migration 先はもう少しまともにディスクの追加とかできる環境なので、パフォーマンス的にもそこそこ生サーバに近づけるんじゃなかろうかと思っています。
2007-01-12 [長年日記]
_ ほぉおおぉお < テキストファイル@POSIX
ときどきの雑記帖 リターンズ 2007年1月 - テキストファイル」の定義
そんなものまで一応定義があるとは。これでファイル末尾には改行コードをつけましょうと言える根拠が一つ見つかった。
_ ネットワーク上のマウントポイントの確認方法
なんか忘れるのでメモ。
| プロトコル | コマンド |
| NFS | showmount HOST |
| SMB/CIFS | smbclient -L HOST |
ただ、smbclient の方はなんかちゃんと全部出てきたりこなかったりするような…。サーバ側の問題なのかクライアント側の問題なのか…。まぁ Windows とは相性が悪いと(おい)。
afp とか WebDAV にも同じ機能はあるんだろうけど、とりあえず要らないから調べてない。
2007-01-13 [長年日記]
_ しっぱい
TrackBack に一回失敗して再送信したらなぜか本文が二重になってしまったので調整用のセクションです。
_ 入門段階を済ませてから?
「.emacs」でいろいろ細かい設定ができるのだが、それは入門段階を済ませてから。
んー。.emacs を適切に設定しておかないと日本語の読み書きできなくねすか? そこの部分だけは適当にコピペしてスタートしちゃうってのがよい手順かと。
あと
- Ctrl キーは A の左にないと絶対つらい
- Meta キーも Esc ではなく Alt がオススメ
- backspace がヘルプ(C-h) になる場合がある
- その場合は C-d で delete になることを覚えておくとたぶん助かる
- C-r でインクリメンタルの後方検索
- C-spc での選択範囲中にコマンドを実行するとその範囲内(リージョン)に影響する
というのは知っておくといいかも。
2007-01-15 [長年日記]
_ cron + dRuby ってできるかな?
すごい適当な思いつき。
crontab の管理を RAA - crontab で行うようにしておいて、それを dRuby で飛ばすと、複数のサーバの crontab を一つのホストで(それぞれのホストにログオンすることなく)管理できるんじゃね?
Web ベースで設定できるようにするのってよくあるけど、それだけだと数が増えたときに面倒なのはあまり変わらない。でもこの方法を使えば特定のホストの cron の様子も全体の様子も全部把握できるんじゃなかろうか。
いやまぁね。実際の負荷の様子は crontab が集中管理できても分からないんだけどさ、それでも新しいサーバを起こすときとか crontab を変更するときとか、他のホストの動作も気にしないといけないケースとかあるでしょ? あれ面倒だなぁと思って。
いやー。つかね。dRuby って興味持ってから何年も経ってるけどぜんっぜん勉強してないんだよね。本は持ってるんだけど。いやー。思いついちゃったね。dRuby を使ったら嬉しいかもしれないこと。初めて思いついちゃった。どうしよう。どっかに落ちてると嬉しいんだけどねぇ。
んー? この crontab オブジェクト、add と grep と run しかできないような…。追加はできても削除と書き換えができないのか。まー確かにそこで悩むんだよな。*1crontab を DBM で管理するとかできれば楽なのかも。つーことでつらつら調べてみたら GNU mcron という、Scheme でスケジュールを記述できる狂ったシステムを見つけた。いやそれはさすがに勘弁。
*1 ずっと前に PukiWiki の plugin から crontab へアクセスできるようになったら面白いかもなぁと思ったときに、頭の中でそこまでは一応考えていたのよ。
2007-01-16 [長年日記]
_ crontab と dotfile について考える
珍しく頭の回転がいいなぁと喜んでいたら単に落ち着きがなかっただけらしく、ミスってサーバのホームディレクトリの中身をぶっ飛ばしてしまった。まぁなくなったら泣いちゃうような「データ」はない*1し、たぶん前のサーバの中身放置してるから取り出せると思うんだけど、調べたら公開してるサイトのバックアップが取れてるつもりで全然取れてなかった。crontab の設定ってどうやるのがベストなのか未だによく分からん。今までログとか割ときっちり押さえていただけに結構くやしい。まぁ、取ってただけで何も活用しちゃいないんだけど。
以前、自分の機械について反省した気になっていたが、自宅サーバも全然ダメダメな状態なので、もっとなんとかしないとなぁ。やっぱりお仕事と違って手ぇ抜きすぎ。なんかスクリプトも全然リポジトリに入ってないし。どうするつもりなんや > 自分
やはり今日の占いが最下位だったのは本当だったのか。なんか、急に沈んできてしまった。いかん。いかんぞ!
crontab
とりあえず crontab 周りを考えてみた。
ユーザーの分は crontab コマンドを使って設定することになるんだけど、このデータは普通 /var 以下に入るし、バックアップなんか取ってない。ホームディレクトリを丸ごとコピーして安心してるとここでハマる。crontab コマンドを wrap して -e が済んだら自動的に -l をリダイレクトして ~/.crontab に落とすようにすりゃいんだろか。あ、これなら常に手元に残るな。
dotfile
ついでに、dotfile は
~/.dotfiles/ 実体(バージョン管理) ~/ リンク
するのがいいかなぁーとなんとなく思っていたり。で、プロジェクト(というほど大げさじゃないけど)用ととりあえず残しておく雑多用にリポジトリを分けちまえばいいか。
*1 また考えれば作れるスクリプトとかどうせ公開サイトにあるデータとかそんなんはあるけど。
_ 安パーツで高可用性 PC サーバ
最近の USB メモリって安いんだなぁって思ったのがきっかけ。もう最近の USB メモリは特別にダイエットとかしなくても、デスクトップ環境さえ作らなければ普通の Unix がそのままインストールできるサイズなのね。すごいな。てことは、
- USB knoppix みたいな感じで、コンパイルとかディスクアクセスがあまり必要のないディストリビューションを USB メモリに入れる*1
- IDE でも SATA でもいいからホットプラグできるリム−バブルケースでディスクを仕込んでそれを mount する
- さらに NFS などを使ったディスクの冗長化を行う*2
- サーバは仮想化してマシンから独立させておく
- 安物でいいので予備機、予備ディスクを準備しておく*3
を組み合わせれば、安い PC ベースでもけっこう可用性の高いシステムが作れるんだな。最近のプロセッサは省電力にも気を使ってくれるし、仮想化支援もやってくれるし、なんか、ものすごくとてもいい時代になってきたんじゃなかろうか。
ただしリビングの自宅サーバの場合はこのうえにさらに静音と場所を取らないという要求が増える。特に場所を取らないという点については機械が冗長になったらほぼアウトなので難しいのだなぁ。
_ フジのデジカメプリントは拡張子 .JPEG を認識しない
FUJIFILM | パーソナル製品 | プリント | 写真出力サービス | フジカラーデジカメプリント | お店で注文
生まれて初めてデジタルデータを焼いてもらった。いやーおっくれってるー。
つか拡張子 .jpeg くらい認識しろって。おかげで CD-RW 焼き直しになっちゃっただろ。
2007-01-17 [長年日記]
_ Ruby のモジュールをつらつらと
眺めてみる。いやその管理用のツールをもうちょっとまともに用意しとかないといかんなーと思ったもんで。昔なら問答無用で一から作るって方向になった*1と思うけど今は面倒くさいの(と、他人のコードを読んでみたいという欲求)で、モジュールをちょろちょろ眺めている。と言ってもまだ RAA と RubyForge で検索掛けたくらいなんだけど。
※ 何が使えるもので何が違うのかまださっぱり分かっていないのでツッコミは絶賛大歓迎中です。
メール周り
- RAA - mailparser
- mailread よりいいんだと思うけどまだよく分からず。raccが必要。ただまぁそんなに本格的なものが要るかって言われたらそんなことないとは思っている。
- RAA - scarlet
- まだ読んでないんだけど、管理系のメールの取り回しにひょっとしたらすごく役に立つのかもしれない。
- RAA - classifier
- まだよく分かってないんだけど、メッセージの分類に便利かもしれず。
メールの処理は今のところ Thunderbird 一辺倒でこれと言って工夫していないので、そこを反省してできるだけ自動化できるようにしていきたいな*2。Feed に変換するっつーのもいいかなと思ってはいる。それぷとか言わずに Perl は触りたくないので Ruby で行く方向で。
スケジュール周り
人間用のスケジューラじゃなくて機械のスケジュールを分かりやすくしたい方向で。
- RAA - crontab
- どこまで使えるのか分からないけど、とりあえずメモ。
- vpim - a library to manipulate vCards and iCalendars
- 実行予定を iCal 形式にできたら見やすそうだなぁと。複数の機械のスケジュールを iCal でオーバーラップして表示させたら見やすくないですか。データの整形さえできれば見た目をどう整えるとかクライアントの操作性とか全然考える必要ないのもステキ。ただ実現できるかどうか全然検討してません。
あと個人用途では crontab コマンドの wrapper もあったらいいかなと思うのはこの間書いた通り。
ファイルとか
ここら辺は管理は考えてなくて、使ったら便利そーとか面白そーって感じで目についたもの。
- RAA - hstore
- スレッドセーフな PStore
- RubyForge: FSDB: Project Info
- ディレクトリの中にファイルを配置していく PStore みたいなもんかな? なんか Gauche の組み込みにこういう働きのものがあってうらやましかった記憶がある。
- RAA - find2
- depth が使えるのはいいな
経験上、どマイナーな日記ではこうして挙げておいてもツッコミで情報やノウハウを補完できないのがつらいところだな…。
2007-01-18 [長年日記]
_ prototype.js 1.5 and prototypejs.org
Prototype Javascript Library Prototype 1.5 and the Documentation is Here
すっかり忘れていたけどしっかり進んでたんですな。
2007-01-19 [長年日記]
_ crontab コマンドでの設定内容を自動バックアップ
作ってみた。ヘボいモノなのに shell スクリプトがロクに書けないので Ruby になってしまっていますごめんなさい。
ほんとは保存ファイル名もオプションで渡したかったんだけど、「あるオプションだけ取り除いて残りを crontab に丸投げする」という処理をどう書いたものやら、考えるのが面倒くさくなったので決め打ちになってます。
一応機能としては
- すべて crontab コマンドに丸投げする
- -e オプションが与えられた場合は、設定完了後自動的に -e を -l に置き換えて crontab -l > ~/.crontab を実行、内容を保存する
- -u オプションが与えられた場合は ~/.crontab.USERNAME に保存する
- ほんとは ~USERNAME/.crontab の方がよかったかもしれないけど、なんとなく見送りました。
ということをやってます。golf とか苦手なのでなんかダサイですが勘弁してちょということで。
自分はこれを alias にセットして安心しております。
#! /usr/bin/env ruby
# A wrapper for crontab command.
#
# All options pass through this.
# If '-e' option given, do `crontab -l > STORE_FILE`
#
# @since 2007-01-18
require 'optparse'
Version = "0.2"
#
# Crontab wrapper class
#
class CrontabWrap
#
# construct object
#
# default STORE_FILE is ~/.crontab
#
def initialize()
@store = '~/.crontab'
accept_cmdparam()
@argv_org = ARGV
@debug = false
end
#
# take all options to crontab
#
# do backup if '-e' option given
#
def exec
if ( @debug )
STDERR.puts 'crontab ' + @argv_org.join( " " )
end
if ( system( 'crontab ' + @argv_org.join( " " ) ) )
if ( @argv_org.include?( '-e' ) )
argv_pass = []
@argv_org.each { |arg|
if ( arg == '-e' )
argv_pass.push( '-l' )
else
argv_pass.push( arg )
end
}
if ( @debug )
STDERR.puts 'crontab ' + argv_pass.join( " " ) + " > #{@store}"
end
system( 'crontab ' + argv_pass.join( " " ) + " > #{@store}" )
end
end
end
#
# if '-u' option given, add username to @store
#
def accept_cmdparam
opt = OptionParser.new()
opt.on( '-u USER' ) { |user|
if ( user != ENV['USER'] )
@store += '.' + user
end
}
begin
opt.parse( ARGV )
rescue
end
end
end # of class CrontabWrap
wrapper = CrontabWrap.new()
wrapper.exec()
2007-01-20 [長年日記]
_ 正規表現の //、コメントの //
先を越されたがあえて書く - ときどきの雑記帖 リターンズ 2007年1月
せんせい。Ecmascript では // はコメントになります。
NOTE 正規表現リテラルは空にはならない; 空の正規表現リテラルをあらわす代わりに、文字
//は 1 行コメントを開始する。空の正規表現を指定するには、/(?:)/を用いる。
オリジナルは PDF なんで日本語訳の方で。
まぁ、だから何って話なんですが、ごくたまに自分が忘れます。あと PHP を書くときに <?php ?> を忘れるとかもよくやるな。動かしてみると全部ブラウザに出てて???ってなる。あれ面倒くさい。
2007-01-21 [長年日記]
_ クーラーをファンレスにしたが効果なかった
つーことは HDD からくる振動か。こっから先は茨の道だなぁ。もっと高いケースにすべきだった? いやーキツいよ。きついですそれは。
ここで踏みとどまらないと完全に静音スパイラルだ。やめておこう。
[追記]ふすまを挟んだら効果が分かった。ちょっと音が減ってるらしい。ビミョー。このために5000円使ったのかぁ…。まぁいいか。こんなの自己満足だからな。
_ Frenzy 1.1 は SLAX のようなカスタマイズが可能に?
Project Frenzy - FreeBSD-based LiveCD
※ なんで news に permlink ないんだー。
SLAX って Slackware ベースの LiveCD か。Live CD Linux としては日本では産総研の影響で knoppix だけ突出して有名だけど、どーも好きになれないんだよな。Slackware にもそれほどいいイメージはないけれど(^^;、knoppix よりはなんか相性よさそうな気がする。
FreeBSD 6.2R も出たし、Frenzy 1.1 に期待してみよう。
cf.
ついでに DSL(Damn Small Linux) とかメモ
knoppix をうざいと思っているなら代わりのものを探せばよい。つーことで
- DSL information
- Open Tech Press|Damn Small Linuxをペンドライブにインストールしてパラダイス気分
- IBM dW : Linux : DSL Linux: 小さな distro に詰められた大きな威力 - Japan
この辺からちょっと試してみようか。
_ netselect であれこれ
※ netselect のオリジナルってどこなんだろ。各パッケージシステム(apt, gentoo, ports など)から手に入るんでいいんだけど。あ、Fink にはないな。
普段はこれと言って気にしてないんだけど、FreeBSD mirror はどこが近いのかなーと思い、自分で ping を打ちまくるツールでも書こうかと思ったけど、それもなんか面倒だと言ったら netselect を教えてもらった。
netselect HOST HOST HOST HOST
と書いていくと、いちばん反応の速いホスト名が返ってくるんだけど、例えば zsh 上では
netselect -vv 192.168.0.{1..254}
とやるとローカルのネットワーク上の IP アドレスの生死のチェックもできる。
netselect `cat FILE`
とやれば、あらかじめホスト名を列挙しておいたテキストファイルからリストを展開してチェックできる。いろんな目的に合わせて mirror サイトのリストを切り替えて使うことができるわけだ。便利便利。
ただし、ping によるチェックらしいんで ping を叩き落としているサイトのチェックには使えないと思う。
と思ったら純粋な ping ではないっぽい。ip alias の分は死んでいると返ってくる。実際に ping を打つと alias と言えど生きているのでこの返事はちょっと困る。何か詳しいこと知ってる人は教えてください。
mtr
OSX + Panther + Fink の組み合わせには netselect がないんでどうしようかと思っていたら
を見つけた。これは ping と traceroute を組み合わせた動きをして細かい様子を観察できるもの。gtk と curses で動く様子のスクリーンショットがリンク先から見れるので雰囲気はだいたいつかめると思う。これを
mtr -r -c 10 HOST
てな感じで report mode で動かしてやると curses でも gtk でもなく標準出力に出せるので、for と組み合わせたりして適当に加工すれば目的のデータの収集はできそう。
2007-01-22 [長年日記]
_ NHKスペシャル『Google革命の衝撃』
ごく簡単にメモ。
「検索」というキーワードを際立たせるためなんだろうけど、広告の話の中で AdSense を外してある。分かりやすさの代わりに Google の強さの一端についての情報が完全に消えてしまうので結構きわどい判断かも。
「あちら側」や「向こう側」という言葉にピンとこない層に対しても、Google という存在とそのサービスに依存する若者という構図を利用することで、オンラインサービスに対する依存とその状況の危うさを分かりやすく提示できている点はさすが。
ただ逆に映像がアメリカ中心すぎて Google のサービスとそれに対する依存の様子、また SEO, SEM の話や検索順位がビジネスに直結する状況などを「実感の湧かない海の向こうの話」にしてしまう感じはある*1。あるいは若者世代のおばかさんぶり、という風に見えなくもない。日本の携帯キャリアとの提携の見せ方なども、ともすれば黒船来襲再びのように映っちゃったかも。
それが狙いなのかもしれないけど、別に Google や若い世代に限らない話だから、ちょっとどうかなぁと思った。余計なお世話かもしれないけど。
Google のアジアにおける苦戦の様子なども続編として描いてくれたら嬉しいな。
*1 特に番組のメインターゲットは IT スキルが低くてそれほど Web 上のサービスを利用しておらず、身近な話として捉えるのは難しそう。
2007-01-23 [長年日記]
_ cron, crontab, and more
※ タイトルには意味ないです。
Unix の伝統的なツールで、かつ GNU のツールが(普及|台頭)していないものには意外と細かいバージョンの違いがある。cron もその一つ。
自分で見て試した限りでは以下のような違いがあった。
| FreeBSD | /etc/cron.d/* を読まない |
| Linux | cron -j でジョブの実行を数秒分散させるってことはできない? |
実行時間の分散についてはランダムにずらすよりは fcron や uschedule の方が賢いのでそんなに気にする必要はないだろうけど、FreeBSD の「設定ファイルを分けることができない」っていうのは、設定するものが増えてくると面倒なような気がしないでもない*1。
で、それとは別に cron て意外と不便だなと思うのは
- 秒単位の指定はできない
- やるとしたらプログラムを指定秒 sleep してから動くようにセットする
- 「第2月曜」という指定はできない
- やるとしたら月曜日に実行を予約して、立ち上げたプログラムの方で第2に当たるかどうかをチェックしないといけない
辺り。この辺は Windows のタスクスケジューラの方がよくできている。*2
特に 2 のような要求はビジネスでスケジューリングしたいときには結構出てくると思う。毎月の最終営業日が終業したタイミングでバッチ処理を走らせる、なんてのはいかにもありそうだ*3。その辺考えると伝統的な cron に代わるスケジューラってあってもよさそう。ということでもう一度調べたらこんなものを見つけた。
- Mcron - GNU Project - Free Software Foundation (FSF)
- Guile で書く
- Fcron : a periodical command scheduler for Unix and Linux systems
- load average とか気にしてくれます。ほとんど cron 互換と言っても差し支えないような?
- 24時間動いてなくてもいいらしい。その機能は結構嬉しい。開発用クライアントマシンで daemon のログがものすごいことになったりするのをうまく解決できるかも。あんまり細かく見てないけど。
- uschedule
- もうちょっと細かい指定ができるんだけど、互換性もなくなってきてるし、なんでこんなにいっぱい分かれてるんだろ?
load average を見て実行を遅らせるとか、やっぱシステム寄りの見方が中心なのかなぁという感じがする。
OSX は launchd で iCal との連携も強化してるっぽいけど、ぱっと見た感じ XML を使うみたいで、直書きのことは考慮してないかなぁ? まぁ人間に都合のいい細かい情報って、逆に機械に読みやすい形式で書式を決めていくのが面倒なケースも多いのでしょうがないのかもしんない。
つーことで結局のところ mcron のようなアプローチで、自分の書きやすい言語で日時などの条件をチェックしてから目的のプログラムを動かす、っていう流れにしちゃうのがいちばんいいのかもしんない。一瞬、YAML で設定ファイルを〜とか思ったけど、そういうことはしない方がたぶんいい。その方法で簡単に記述できるような条件なら、妥協も組み合わせて既存の crontab のフォーマットで再現すべきだろう。
ブツは cron ジョブに複雑な条件を与えやすくする の方に載せました。
2007-01-24 [長年日記]
_ cron ジョブに複雑な条件を与えやすくする
つーことで『cron, crontab, and more』でちまちま悩んでいましたが、思いついたのはまた Ruby ですが以下のものです。やってることは簡単で、要は
複雑な条件はお気に入りの言語で記述する
ってことです。そのために
- 条件の名前と実行するプログラムを与えるだけのスクリプトを用意
- 条件の名前はそのまま(この場合は Ruby の)実行するメソッド名に該当する
- cron には(例えば)以下のように書く
complex-cron -c RULE 'program'
という方法にしてみました。以下のスクリプトでは RULE は省略可能で、その場合は `default' を指定したものとみなしています。
※ 比較的最近の Web アプリでよくあるプラグインと基本的には同じアイディア、だと思ってます。
呼び出すメソッド(つまり判定条件)に引き数を与えることはできません。一瞬悩みましたが必要ないだろうと思いますし、引き数を与えられるようにすると実行時のパラメータの与え方が複雑になります。
実行するスクリプト
(例えばcomplex-cron て名前にしておく)
#! /usr/bin/env ruby
require 'optparse'
Version = '0.1'
class ComplexCron
def initialize
@condfile = '/etc/defaults/cronconds'
@condname = nil
@cond_default = 'default'
@debug = false
accept_options()
@cmd = ARGV.shift
exam_options()
exec_indeed()
end
def exam_options
if ( @cmd.nil? )
raise 'Nothing to do.'
end
if ( !File.exist?( @condfile ) )
raise "File #{@condfile} does not exist."
else
load( @condfile, false )
if ( @condname.nil? )
@condname = @cond_default
elsif ( !ComplexCronConds.instance_methods().include?( @condname ) )
raise "Rule #{@condname} is not defined."
end
end
end
def exec_indeed
if ( ComplexCronConds.instance_method( @condname ) )
if ( @debug )
puts @cmd
else
exec @cmd
end
end
end
def accept_options
opt = OptionParser.new()
opt.on( '-f CONDFILE' ) { |file|
@condfile = file
}
opt.on( '-c CONDNAME' ) { |method|
@condname = method
}
opt.on( '-n', 'dry run' ) { |v|
@debug = true
}
opt.parse!( ARGV )
end
end # of class ComplexCron
ComplexCron.new()
設定ファイルとは名ばかりの Ruby スクリプト
例えば /etc/defaults/cronconds とかいう名前で置いておく。場所はシステムに応じて適当に決めて。
# -*- ruby -*-
module ComplexCronConds
def default
return false
end
end
この中に上で RULE と書いた名前に該当するメソッドを定義していきます。内容はどうぞご自由に。ただしあくまで「条件」をメソッドとして書くので、必ず true か false を返してください。default はあった方がいいかなと思って定義してあるんですけど、実際どう使うのかはあんまりイメージできてません。
これでまぁ、第3水曜だのシステムの負荷の様子だの、Ruby で判別可能な条件はなんでも書けるようになったわけです。あとは必要に迫られたときに考えればいいんじゃないかと。
2007-01-28 [長年日記]
_ gem の検索って不便だな
RubyGems の gem コマンドでパッケージを検索するには
gem search STRING [options]
とするわけなんだけど、これってパッケージ名にしか引っかからないんだなぁ。だとするとあんまり使えない。query とか list とかあるけど結局 name しか見てないから、「こんな機能を持ってるパッケージがあるかどうか」は raa や rubyforge の Web 上のインターフェイスから確認しないとよく分からんてことになっちゃう。(Fink で入れた 0.8.11 と ports で入れた 0.9.0 で確認。)
あ。
gem list --remote | grep -i KEYWORD
にすればいいのか。と思ったら description の行しか引っかからなくて訳分かんねー。
gem list --remote | grep -3 -i KEYWORD
とかになるのか。面倒くさいなぁ*1。おまけに遅いし。apt みたいにローカルにキャッシュ作ってそこから検索してくれないかな。それともそういう gem パッケージがあったりするのかな。gem list でドバーっと取れるリストを DB に突っ込んでそこから検索してくれるようなやつ。
gem list --remote | grep -3 -i KEYWORD | grep '^[^[:space:]\-]'
にするとなんとなくほしい情報に近い感じになるけど、こうなると列挙されるバージョン番号が邪魔だし、本来探しているのと異なるパッケージが出てる可能性もある。現状の list の出力からだと加工も面倒だと、そういうことだなきっと。
あー gem specification の YAML 出力と組み合わせれば目的のものができそう。できそうなのは分かった。……。うん、できそうなのは分かったよ。んー。でも spec を remote から取得する方法はないのか。結局そこに行き着くんだな。gem_server ミラーリング? うえー。
*1 ports の make search key=KEYWORD | grep ^Path もかなり面倒だが、これはまだほしい情報が確実に取れるからかなりマシ。
2007-01-29 [長年日記]
_ rote いいかもしんない。
文句をぶちぶち言いながら gem で何をやっていたのかというと rote です。crontab ネタで調べものをしていたときに偶然見つけた
I sort my thought... - 静的Webサイト生成に便利なrote
に触発されて触ってみました。
Rake と Markdown, Textile の練習にちょうどいいかなぁと。Markdown はなんだかんだ興味を持ちながらまだまともに使ってなかったんだけど、インストールも利用も簡単な gem ベースのツールはこういうときいいな。
今ちょっと rake と何かしらの template を利用した処理をやろうとしてるので、rote はそういう意味でも参考になる。
※ 放置プレイな HTML ベタ書きサイト*1もこれにすれば少しは更新できるようになるかしらんとか思ってもいるところ。blog 系の作りでなければ十分かなと。RSS の生成とかできればなおよいけれども、そこまで言うまい。
*1 実際には PHP を触り始めたときに練習を兼ねて PHP から plain な HTML を生成してそれを上げているんだけど。
2007-01-30 [長年日記]
_ Web検定のサイトが分からない
Webに関わるすべての人の基礎知識 - 社団法人 全日本能率連盟登録資格「Web検定」
まったく自分の欲しい情報にたどりつくことができない。書籍の情報は書籍の情報でまとめておいてください。欲しけりゃ自分でチェックできます。検定の情報を見ようとしてるのに書籍の情報が出てくるような構成は Web 検定的には無問題なんですか。
どうなんだそりゃ。
2007-01-31 [長年日記]
_ DOS/Windows 領域の mount がめんどくさい
考えるのが面倒で避けてきた日本語ファイル名を含む (V?FAT|NTFS) 領域の mount についてやっと分かってきたので整理。
※ 例によって嘘八百書いている可能性があるのでツッコミ希望*1。
まとめ

- mount の option で与える charset/locale は、mount する領域のファイル名のものではなく、「これに変換して扱う」という意味
- 環境変数の言語設定に暗黙に従うのだと思っていたけど、これがそもそも間違っているらしい
- ntfs の場合、ファイル名の保持は必ず Unicode(utf-16le?) で行われるので、codepage を指定する必要がない*2
- 恐らく iocharset/locale の設定によらず、ファイル名そのものは見える
- つまり設定ミスに気づきにくい
- → ext3 や ufs の領域にコピーしたらファイル名が読めない!という事態に
- Windows を使っていてファイル名が SJIS に見えるのは Windows の API を経由したときに変換されているのか?
- msdosfs/vfat の場合は fat 領域の codepage を指定するオプションがある
- この codepage が DOS/Windows のバージョン(≒言語)によって異なる
- 従って codepage が正しくセットされていないと日本語ファイル名が読めないという状況になる
- → 逆に言うと日本語ファイル名が読めなくなることで mount option が間違っていることに気づきやすい
- vfat も long filename の部分は Unicode で、short filename の部分で codepage を使う、という構造になっているらしい
オプションの記述方法
例えば日本語EUCの場合
| locale | ja_JP.eucJP |
| charset | euc-jp |
codepage については共通のはず。
FreeBSDの場合
| FAT | -L ja_JP.eucJP -D CP932 など |
| NTFS | -C eucJP など |
ntfs の charset は eucJP などのように書くらしい。euc-jp じゃないのか? locale の方になんとなく合わせてある? つか FreeBSD で charset つったらそういうもんだっけ。
FreeBSD 6.1-R の時点で、標準で利用できる mount ではマルチバイト文字を含むファイル名で書き込みはできない。
Linuxの場合
| FAT | -o iocgarset=euc-jp,codepage=cp932 など |
| NTFS | -o iocharset=euc-jp など |
実際には使うドライバ?によって違う。Linux の場合は ntfs を mount するためのツールがいっぱいあるので、それによっても変わってくると思う。(ますます面倒くさい。)