■ Ruby 日記 2000/8

    August 2000     
Su Mo Tu We Th Fr Sa
       1  2  3  4  5 
 6  7  8  9 10 11 12 
13 14 15 16 17 18 19 
20 21 22 23 24 25 26 
27 28 29 30 31 

2000/8/1 Tue

めっちゃ暑そう... 最高気温、札幌 35 度、沖縄 25 度とか。 え?

ruby-1.5.5 2000-08-01 です。 ruby-1.4.6 pre3 は、Vine Linux 2.0 と HP-UX 11.0 (HP C Compiler) で OK でした。 HP-UX では、いつものように次のようにコンパイルしています。

$ CC='cc -Ae' CFLAGS='-O +Onolimit' ./configure
コンパイラ関係のパッチは適用した方がいいと思います。

Zip250 買っちゃいました。 最近、IT? 投資が多いなぁ。 USB/PCMCIA どちらも使えるタイプを購入しました。 本体は小型ですし、なかなかいいです。 購入した理由は、大きなデータを持ち歩きたいからです。 Linux で USB が利用できるというのが大きなポイントでした。 ほんと感謝。 接続結果は、USB と PCMCIA どちらも問題ありませんでした。 メディアがフォーマット済のものを購入した関係で、ext2 では確認していませんけど。 これで大きめなデータでも活用できるのでありがたいです。 会社のディスクトップには、Vine Linux が入っています。 これのカーネルを kernel-2.2.16-0vl3 にあげて USB 接続する予定です。 Vine Linux の update モジュールなどを自宅と会社で共有できるのは助かります。 USB っていいですね。 PCMCIA もそうですが、ノート PC などの可能性を大きく広げると思うのです。

gnuplot やっぱり入れるのでした。 ライセンスの関係で、Vine Linux には含まれていないのですが、やっぱり必要ということで。


2000/8/2 Wed

ruby-1.5.5 2000-08-02 です。

今日からセミナー。 講師の方は専門家なんですが、想定がちょっと? 話は B2B のなんですが、要素技術の話がメインです。 事例がなかなかおもしろかったりします。 このセミナー。 集まっているメンバーがおじさんばかりで、これでいいの? って思うのでした。 もっと手を動かすような人が聞きにくればいいのに。

ZIP いいですね。 kernel-2.2.16-0vl3 を会社のディスクトップに入れて USB を使えるようにして ZIP をつなげました。 で、kernel-2.2.16-0vl3 を ZIP に入れて持ち帰り。 なんかホクホク? 会社専用に ZIP ドライブほしいな。 USB だと、ディスクトップでもノート PC でも利用できるので、利用度が上がりますね。

日の出から日の入りまでの時間。 東京より、札幌の方が 30 分くらい長いのですね。 外であれこれするのにいいかも?


2000/8/3 Thu

いろいろあたふたしたスケジュール。 仕事関係の方はこれでいいのかと思う部分あり。 チェックしないと。 そのままだときっと引っかかるのでした。 それとも大丈夫なのかな? 私の心配しすぎかな?

xmms で MP3 を聴きながら。 なかなかいい感じです。 いつでも聴けるというのは、ありがたいものですね。

セミナー中。 ノート PC を持ち込んでなにやら仕事をしている人がいるんですが。 集中してしまっているのか? 周囲のことを忘れてけっこううるさかったりします。 サウンドの設定などもそのままで。 それにしても、ノート PC の持ち込み率がかなり高くて驚いています。 みなさん会社支給のものなのかな? そういうものなのかな?

できるコンサルタント。 また辞めちゃうのです。 古くからの付き合いなのですが、全然しらなくて。 送別会とかやりたかったな。 まあ、向うで落ち着いた頃にでも飲みに行けばいいんですけど。


2000/8/4 Fri

週末ですね。 週のはじめは、先週の雨と風が強かったので空がきれいでした。 いまは、もう遠くの方がかすんでいます。 いつもきれいな空には、なれないんでしょうか?

PPP で接続すると。

  • このページの更新関係バッチ
  • メール関係のバッチ
  • NIFTY 関係のバッチ
  • ちょっと Web 鑑賞
という感じです。 常時接続とは違って、まとめて処理ばかりですね。 バッチ部分は、全部 Ruby なんです。 なんでもかんでも? あ、まだ POP は movemail 利用していたっけ? SMTP は、次のものを利用させてもらっています。
# smtp-lib.rb             -*- ruby -*-
#
# Copyright (C) 1998 by Takaaki Tateishi 
# Time-stamp: "98/10/02 04:05:58 ttate"
#
標準ライブラリ(クラス)を使えばいいのに、まだ移行していないのでした。 どこかに動くサンプルほしいな。 な、ん、て、わがままいわないで自分で書けばいいんですけどね。 踏み切りが悪いのが、movemail が出力する RMAIL 形式のフォーマットに依存していたりするのでした。 単純ではあるんですが、その後の連携関係もちょいよろしくないですし。 実は、Emacs/cmail を使っていますが、~/cmail.crash というファイルがあると cmail は、これを処理してくれます。 この機能を使っていたりするんです。 自分のシステムの mailbox にメールを mailbox 形式でわざわざ突っ込むのがめんどうだったので。 権限も必要ですしね。 こういう? けっこういい連携ができていたりするのでそのまま。 movemail に依存するのはよろしくないなと思っているんですけどね。 また、PPP のアクセスポイントが一般のネット上の場合のために APOP も使える方がいいですし。 いまはプロバイダのアクセスポイントだけなので、POP でもまあいいのですが。 とりあえずは、準備だけでもしておかないとと思っていたりします。

週の後半はセミナーで、楽といえば楽でした。 勉強したいと思うものがいくつかあって、そのきっかけになったのはいいことと思います。 さて、実際に使うということが可能か? これは、別問題ですけど。 いや、やっているところは、やっているんですよね。 自分たちでどこまでできるかだけでも感覚を持ちたいものです。


2000/8/5 Sat

ruby-1.5.5 2000-08-05 です。

本屋に行きたいなぁ。 ということで、近くの本屋さんへ。 ここも久しぶり。 でも、いい感じの本がなくて。 どうも、買っても読めていないという現実が、買うということを抑制しているのかも。 この辺に読みたい本たくさんあるしなぁ。 そうそう Ruby 本(オブジェクト指向スクリプト言語 Ruby)が、たくさん入っていました。 いいことですね。 第三版だったので、一冊買えばよかったかな。

PCMCIA の DVD-ROM の話。 CardBus と 16bit モードをスイッチで選択できます。 CardBus の場合には、CardBus と認識(cardctl)するのですが、cardmgr は 16bit と認識します。 なので残念ながら使えません。 ドライバ ide_cs をロードまではするのですが。 16bit でも動いているのでいいんですけど、ちょっともったいないなぁ。

携帯電話からインターネット。 E-mail 以外の利用というのはどんな感じなんでしょう? 携帯電話からは、1500 万人の利用者がいるそうなのですが。 目的と、利用コストがどのくらいかかっているのか気になったりします。 ほしいと思っているサービスが充実しているから利用するんですよね。 どういう使い方をするのかな?

そうそう PPP 接続すると。 Ruby の開発系の cvs update もしています。 これは一日一度程度ですが。 RedHat 系では、ifup が終わると PPP 接続が開始されます。 なので、スクリプトを書くのは簡単なのです。 対話的に w3m するので、ifdown まではスクリプトに組み込んでいませんけど。

オールインワンの VAIO ノート。 液晶が一部表示できなくなっています。 修理にださなくてはならないのですが、まだちゃんとバックアップが終わっていません。 うーん、ちゃんと整理しないと。 購入した ZIP ドライブに「VAIO シリーズはサポートしません」と書かれています。 ドライバなどが特殊なんでしょうか? 使えてもいいと思うのですが。

せっかく買ったので YSII の MIDI を聴きながら。 おまけ CD-ROM に、YSII の MIDI データが入っています。 これいい感じ。 なつかしいなぁ。 ちゃんとした音源で再生してみたいものですが...

つくった Ruby 版の grep の話。 あれからいくつか改良しています。 もうすこし手を入れると思いますが、とりあえずはブロック表示がいい感じです。 こういう使い方をしているもの? という感じで確認するときにけっこう便利です。 ちょっとズルしているのは、File クラスでは File#path が定義されていますが、IO クラスにはありません。 標準入力のときの対応のために、IO#path をでっちあげています。 こういうやり方って、いいのかな? と思いつつ...


2000/8/6 Sun

買いだしにいきたいな。 目的達成できず。 うーん、今週のりきれるかな。

どこかのテレビ。 ネットをおもしろくして、それで利用量を増やして、価格を下げるとかいっていました。 逆ですよね? 価格を下げて、情報提供者を増やさないと。 それで情報をほしいと思う人も増えるし? ユーザが多くないと、参入者、参入社もすくないと思うのですが? モバイルもつないだままで、気にならないような料金ならいいのにと思うのです。 100 分 1000 円かぁ。 たらたら Web 閲覧しているのには、高いですよね。 予算一万円なら 16 時間使えますけど...

一時間ダウンロード。 kernel-2.2.16-0vl5 がアップされていたので、関連するものをダウンロード。 ほぼ一時間。 ZIP に入れて会社に持っていって、会社のシステムも入れ替えかな? 速くなったとはいえ、もっとネットが速いといいのに。 64KB/s (K byte/s) くらいなら、とってもうれしいんですけどね。 あ、いまの 10 倍? 簡単にはならないですね。 やっぱり? 会社にも ZIP ドライブがほしいですね。

CD どこ? 最近見かけたはずなのに、見つからないのでした。 古い CD なので、いまのうちにクリッピングしたいのですけど。 どこやったかな。 部屋を整理しないとダメかぁ。 そのうちと思いつつ...

104? キーボード。 会社では、Logitech のナチュラルキーボード系(EK104-50)を使っています。 これでの漢字キーなどの割り当てです。 HP-UX で ATOK を使うときのために設定していたりします。 左の WinKey を ALT に、右の ALT, Win, Menu をそれぞれ Henkan, Kanji, Muhenkan にしています。

! Natural keyboard: WinKey
clear Mod4
clear Mod1
keycode 115 = Alt_L
add Mod1 = Alt_L Alt_R

! Atok for Natural keyboard: Alt_R Win Menu
keycode 113 = Henkan
keycode 116 = Kanji
keycode 117 = Muhenkan
Linux では ATOK を使っていないので試していないのですが、ほぼ同じで使えるのではないでしょうか? keycode は、xev コマンドで確認してみてください。 キーボードイベントを確認できるので、keycode も確認できます。

共通概念。 なにかを共同で進める場合、そのメンバーの間での共通の概念って大切ですよね。 ソフトウェア開発なら、データ構造やパターンなどについて。 「ここはこれ」って感じ。 プロジェクトを進行する上で、ちゃんと勉強できるような余裕があればいいですが、普通はないですよね。 また、メンバーの選定時にちゃんとメンバーの条件などを指定できればいいんですが、それも無理ですよね。 チームが長い間いっしょに作業を進めているような場合はまだいいのですが、急造だと大変ですよね。 最近はこういうことも難しいですね。 大丈夫かな? データベースのパフォーマンスだと IO をどうやって減らすか? ログ関係とかキャッシュ関係とか。 でも、これはソフトウェア開発などと違い、共通概念でなくても大丈夫ですね。 物理設計を行う人や、レビューを実施するメンバーに入っていれば、ハマることは減らせるはずですし。 ただ、データベースのプログラミングでの必要な知識というのもあったりします。 この辺は早め早めのソースコードレビューなどが大切かもしれませんね。 データ構造やパターンと違い、習得も楽と思いますし? 違うかな?

仕事関係。 今週は、時間内にシステムの設定をきちっと終わらせる必要があったりします。 最近あんまりやっていないので、ちょい不安。 まあ、なんとかなるでしょうけど。 自由に使えるシステムがないと、こういう作業が必要なときにあたふたしますね。 準備させてよ。 職種を変えて Linux 関係にしようかな? きっと私にあっている気がするんですが...


2000/8/7 Mon

ruby-1.5.5 2000-08-07 です。

会社の帰り。 電車を降りて、後 15 分間歩くだけだったのですが、どしゃ降りの雷。 すごかったです。 ビルの軒先で雨宿りをしながら一時間くらい。 失敗したのは、降りだしていきなりくると思っていなかったので、降りだしてすこし歩いてしまったこと。 すぐに近くのお店に入ればよかったんですけどね。 風も強いし、雨もすごいし、雷がこれから行こうとする方向でガンガンガン。 けっこう怖い感じ。

オゾンホール。 紫外線。 北海道でも関係あるそうですね。 オーストラリアでは、外で子供を遊ばせるのにかなり注意しているというニュースをみたことがあります。 子供たちが安心して外で遊べないようになるんでしょうか?

適材適所。 自分でなにかやる場合の話。 普段「なんでも Ruby」にしています。 だから、いろいろな要求があっても結局 Ruby していたりします。 適材適所ということから、本来なら別の方法もあるのですが、私にとっては Ruby の課題にしてしまった方が楽しいです。 別の方法ややり方の方が適材適所とわかっていても。 Ruby でやり方などを確立してから、本来の姿にするのでもいいですし。 Ruby でも十分な場合も多いですしね。 なんでもかんでも Ruby にしてしまうのは、宗教的で嫌われるかもしれませんけど、私は好きですから。 仕事でも、できるだけ Ruby でやってしまいます。 ただ、すこしだけは他のものも勉強しないとは、思っているんですけどね。

B2B とか。 セミナーを受けたので、企業間でのやり取りのための基礎的な要素技術について、ある程度勉強できました。 この辺を試したいと思っていたりします。 適当な要求と CORBA や XML などの基礎技術を考慮して。 B2B だけではないのですが、連携するシステムって興味があります。 難しいと思っています。 これをどうカバーしているのか? 単純に CORBA とか、使いやすいのか? というのも興味の対象なんですけどね。 どこかに実験的に構築してみたいものです。 なにをするかというのが問題ですけどね。 社内システムとかつくらせてほしかったりするんですけど...

あわせて Java する? Java World に Linux 用の SDK も収録されるようになりました。 試してみようと思っているんですが、まだ手をつけていません。 精神的に余裕がない感じ? 会社のシステムには入れて、使えるようにしたいと思いつつ。 やっぱり日常には使わないので、なかなか課題をみつけにくいですね。 いつものように、普段使うようなコマンドレベルを実装してみますか。 でも、もうすこし先かも? コマンドとして使うには反応が悪そうなので、常駐させて? ネットワークでアクセスする? あ、アクセスする側は Ruby とか。

機器のセットアップ。 久しぶりにケーブリングとか。 体を動かすのっていい感じ。 でもマシンルームでは長時間の作業は体調を崩します。 今回は、それほど長くは必要がなかったですけど。 明日はディスクの設定かな。 トータル 1TB のディスクなんですが、RAID 0/1 にするので使える容量は半分ですね。 サクサクイニシャライズして、簡単な確認して。 時間があったらすこし試してみたいこともあったりします。 そうそう、データベース用なので RAW デバイスを使ってほしいのですが、お客様はファイルシステムにしたいようです。 RAW デバイスの方がいいのにな。 ただ、バックアップを考えると、ファイルシステムの方が、普通のコマンドで扱えるのでいいですけど。


2000/8/8 Tue

ruby-1.5.5 2000-08-08 です。

今日の天候は? 最近の天候って、極端ですよね。

Web の検索。 CF-B5R のページ って、検索ページに載らないのでした。 キーワード「CF-B5R Linux」でヒットするページで、もう十分情報があるので、いまさらなんですけど。

若いエンジニア。 頑張れるってことは大切です。 不況期だと、マネジメントの手法として「頑張り」が起きないようにします。 予算の関係だったりします。 でも、「頑張り」をちゃんと受けとめるようなやり方もあると思うのです。 そうしないと前進できないですよね。


2000/8/9 Wed

ruby-1.5.5 2000-08-09 です。

朝からミーティングです。 こちらは営業と私の二人で、お客様は八人でした。 お客様が作成しているアプリケーションについて、いくつかの処理方法についてのアドバイスなどが話題だったのです。 「ハードウェアを生かした形で処理方法を考慮してください」と。 パラレルで動かせるものは積極的にパラレルにしないと、CPU も IO もあまってしまうので。 さて、新しいディスクの設定が、うまく効果がでるかな? データベースなのにファイルシステムを使っているので、そこから引っかかったりします。 「ファイル」がみえるほうが扱いやすいのですが、データベースは RAW デバイスの方がいいのですけど。

Let's note の話。 すこしディスクの音が気になります。 たまに変な音がします。 さて、なにか問題あり? いままでしていなかった音ということと、シーク音などではないという感じです。 たまにですが数秒間「ジー」って感じで、その後シーク音がしてこの音は止まります。 ディスク自身が警告をだすような仕組みってあるのかな? 確認できるといいのに。 高いディスクだと、ディスクの状態などがレポートされますけど。

日付順にソート。 Web ブラウザで ftp 先を確認します。 ファイルがたくさんある場合、更新されたものだけを確認したいとします。 ファイル名が表示されている状態で、その ftp 先の一覧を HTML でセーブします。 これを次の sort コマンドで。

sort +5 -6 +3M +4n
逆順にだすために -r も必要かな。 日々更新されているみなさん、ありがとうございます。


2000/8/10 Thu

すこしゆっくりできるかな?

sleep コマンド。

sleep ARGV.shift.to_f
Linux には、usleep というコマンドがありますけど、秒を小数点で扱える方がわかりやすいですよね。 普段使うコマンドでも、Ruby しています。 常にキャッシュに載っているように? おかげで、サクサク動くんですよ。 みなさんも、なにげに使うコマンド(手が勝手に入力するようなものなど)を Ruby してみません? 簡単なものでもいいと思うのです。

Let's note の話。 夏場は省エネモードにしました。 あ、違う違う。 省電力モードです。 BIOS で「自動」に設定しておくと AC 電源の場合は CPU クロック 600MHz で、バッテリーは 500MHz くらいです。 バッテリーが減ると、変わるらしい記述はあるのですが、よくわかりません。 これを「常に省電力モード」に設定しました。 これでどのくらい発熱が抑えられるかわかりませんけど。

東京の夏。 よくないのが、夜気温が下がらないことです。 青森の最高気温が、東京の最低気温だったりするところがなかなかつらいですね。 最低気温 27 度って? と思ってしまいます。 クーラーの放熱と緑がすくないので、ヒートアイランド現象なんでしょうね。 夜、涼しければもっといろいろ楽になるはずなんですが。

vmstat コマンド。 普段作業しているときに、システムの動きって気になります? 私は一つのウィンドウで vmstat 1 が動いていることが多いです。 Linux の場合 vmstat で CPU にメモリに IO が確認できます。 いっしょにネットもみれるといいのですけどね。 これを動かしておいて、「普通の状態」からみています。 どうも仕事柄? こういうのが気になってしまうのでした。


2000/8/11 Fri

週末ですね。 みなさん夏休みってどうするんです? 私は 8/20 からの週に。 それまでにいろいろかたづけて、夏休みぃ...

Let's note 内蔵モデム。 カーネルは再コンパイルして、insmod できるようになりました。 電話をかけて、相手にコネクトします。 でも、接続後 cu を終了しようとするとシステムが固まってしまいます。 固まるのは困るなぁ。 cu だけの問題? なにかミスしているのかな? fol をもう一度検索して、試してダメだったらあきらめかな。 余計なものが動いていたかな? ALSA も止めて試したのですがダメだったし。 PCMCIA 止めてから試す?

大きな規模は経験が必要。 経験がないため差と思うのですが、ちょっとした設定もミスっています。 500GB のデータベースを扱うのに、100MB くらいのデータベースがやっと動くような設定と同じ扱い。 普通の操作もちゃんと動かなかったりしています。 細かな設定などもサポートが必要なようなのですが、こういう人たちが規模の大きなシステムをつくっていて大丈夫? と、心配です。 「処理方法はこれしかない」といういい方も気になります。 規模が大きいシステムをサポートする機能をデータベースは提供しています。 こういうものを積極的に使わなくては、運用の時間などに処理時間を取られてしまいます。 検索の時間だけはまともになったとしても、運用が難しくなってしまうのです。 設定関係などもっと突っ込んでフォローが必要ということがわかったのですが、アプリケーションの中身なども心配です。


2000/8/12 Sat

Let's note 内蔵モデム。 結局あきらめました。 失敗した経過も残しておこうと思います。 ふぅ。 使いたかったのは、0120 経由でのアクセス先。 PHS 経由では、ここにアクセスできないのです(OK にしてよ)。 いいところまで行くのですが、システムが固まるので。 その後すこしシステムが不安定な感じです。 サスペンド後、リジュームでうまく立ち上がらないことが一度ありました。 なんか不安だなぁ。 カーネルなどのシステムをもとに戻したつもりなんですが、ミスがあるのかな? 現在は Vine Seed のカーネルと同じにしたんですが。 いままで使ったことがなかった ppxp も試してみました。 PHS 経由での ppxp は OK です。 状態モニタはとても実施しやすいのでいいですね。 自動化するものも組み込めるようですし。 まだなれていませんけど、うまく使えるようになればと思います。 いまごろなんですけど。

本屋さんへ。 今日は収穫物あり。 「UNIX ネットワークプログラミング 第 2 版 Vol.2」です。 今回は IPC です。 亡くなられた W.Richard Stevens さんの本です。 亡くなられてとても残念です。 書かれた本に何度も助けられました。 多くの人が読んでいれば、システムをうまく使えないプログラムが減ると思うのですが。 あぁ。

コミック文庫「赤い牙 6,7」。 柴田昌弘さんのものです。 「ブルーソネット」シリーズの結末が楽しみです。 途中までしかしらないので...


2000/8/13 Sun

台風。 みなさん気をつけてくださいね。

PPxP の話。 Vine Linux 上では xppxpm がアイコン状態で起動できて、接続に便利そうです。 ですが、どうも「設定ファイル名」をうまく渡せません。 あれ? tkppxp は、うまく使えているので、必要になったら tkppxp を使うという感じでしょうか。 アイコン状態で xppxpm をだしておきたかったんですが。 それと、pppd とは違い ppxpd の場合、一度接続を切ると PHS のモデムカードが反応しなくなります。 PCMCIA のツールで、カードを eject/insert すれば動作します。 いままで pppd で利用している場合にはこういうことがなかったので、使い方かもしれません。 ふーん。 それと tkppxp では、ログファイルの文字が読めません。 バックグラウンドとフォアグラウンドの色が同じような気がします。 バックグラウンドの指定は、設定ファイルにあったので変更してみたのですが、同時にフォアグランドも変わってしまいます。 Tcl/Tk は読めないので、これ以上は追いかけられなかったんですが。 あれまぁ。 カットアンドペーストを行うと情報が拾えるので、表示はしているようなんですけどね。 あ、わかりましたフォント指定でした。 ロードできそうなフォント名なのですが、ダメだったのかもしれません。 だめなら fixed 使うんでなかったでしたっけ? ということで、tkppxp かな。 これで PHS のカードでそのまま何度もアクセスできるとうれしいのですけど。 ソース読んでみれば大丈夫なのかな? pppd よりも ppxp の方が、コネクションが成立するまですごく速くてとってもいいみたいですね。

RD の書き方。 忘れちゃってます。 ややこしい使い方はしていないのですが、すっかり。 普段から使っていないからかな。 まずいぞ。 あ、環境も未整備。 唖然。 あ、さらに現在 RAA で登録されているものって依存関係がちょっと? optparse-0.7.5, racc-0.14.6, rdtool-0.6.2 で対応してしまいました。 古いものが手もとに残っていてよかったです。 もともとは、optparse だけ module_function の件で新しくすればよかったんですが、ついでなので新しいものを入れたら...


2000/8/14 Mon

あれこれ、もうすこし。

世の中お盆休みなんですね。 Web 上のニュースサイトもお休みしていたりするんですね。 なんか、あれ? という感じ。 担当者のお休みは必要と思うのですが、組織として動いていないのかな。 うちの会社は、夏休みは適当な時期にとることになっていて、分散しています。 この時期、空がきれいだったり(台風のため?)、電車が空いていたり、東京は普段よりいいところになっています。 いつもこんな感じならいいのですが。

すいません。 この実装、OS に依存するようです。 つくり直しだなぁ。 ここ。 最近 Ruby の話題がすくないですね。 雑誌掲載のためにあれこれ書いているんですが。 紙に印刷して一枚分くらいのスクリプト。 けっこうこれであれこれできるんですよね。 私が好きなタイプが、こういう紙一枚に入るのにあれこれできるようなものだったりします。

入れ替えちゃいました
スクリプトはオープンにということで。 引数として、「ホスト名」全部とってきたい「トップディレクトリ」を指定します。 これで、カレントディレクトリ以下にコピーをどんどん作ってしまいます。 私的には、休み休みとってください的リミットを入れたいところなんですが、サンプルとして。 「ディレクトリか?」という確認のために、FTP#nlst を使っています。 確認のために複数回実行してしまうと、それがトラフィックになってしまうので、一度得た情報を使い回しています。 そのため、ちょい読みにくいですね。


2000/8/15 Tue

ruby-1.5.5 2000-08-15 です。

使い続けると、気がつくことってありますよね。 触っている時間だけが問題ではないですが、自分なりに使い続けるというのは大切に思うのでした。 普段使っていないプラットフォームって不安ありません?

昨日の「全部とってくるぞ」系の ftp ツール。 普通に書いたらすなおによくなってしまいました。 なーんだ。

#! /usr/local/bin/ruby
# /home/tetsu/src/ruby/net/ftp/allget.rb
# Created: August 15,2000 Tuesday 00:38:18
# Author: tetsu(WATANABE Tetsuya)
# $Id: allget.rb,v 1.3 2000/08/15 02:40:33 tetsu Exp $
# usage:

def usage
  STDERR.print "usage: #{$0} hostname topdir\n"
  exit 1
end

def multi_mkdir(mpath)
  print "mkdir #{mpath}\n"
  path = ''
  mpath.split('/').each do |f|
    path.concat(f + '/')
    Dir.mkdir(path) unless File.exist?(path)
  end
end

require 'net/ftp'
include Net

class FTP
  def allget(path)
    multi_mkdir(path)
    self.ls(path).each do |ls_line|
      ls_line.scan(/^(-|d).+?(\S+)$/) do |dir, file|
	next if file == '.' || file == '..'
	f = path + '/' + file
	case dir
	when '-'
	  mtime = self.mtime(f)
	  next if File.exist?(f) && File.mtime(f) >= mtime
	  print "get #{f}\n"
	  self.getbinaryfile(f, f, 4096)
	  File.utime(mtime, mtime, f)
	when 'd'
	  allget(f)
	end
      end
    end
  end
end

User = 'anonymous'
Password = 'Thanks!'		# E-mail address を入れましょう!

usage if ARGV.size != 2

Host = ARGV.shift
TopDir = ARGV.shift.sub(/^\//, '')

Dir.mkdir(Host) unless File.exist?(Host)
Dir.chdir(Host)

ftp = FTP.open(Host, User, Password)

ftp.allget(TopDir)

ftp.quit
ftp.close
最初 FTP#nlst で、はじめてしまったのが問題だったと思います。 でも、いまのディレクトリの情報を普通に扱うほうが、自然で分かりやすいですね。 また、これでも無駄なトラフィックは起きませんし。 Dir#chdir や FTP#chdir しないためか構造的にもすっきりしているので、ほんといい感じになりました。 って、自分で書いてどうするんでしょう。 これも紙一枚スクリプトです。 手頃でいい感じだと思うのでした。 そうそう、もし使う場合には、適当なところで sleep などを入れてくださいね。 最初から FTP#dir 使って書けばよかったと思うことしきり。

私のパートは、もう一度見直したら一段落かな。

PPxP の話。 ホント接続が速いですね。 PHS は、ISDN と同じくらい速いのですが、さくっとネットに接続できるのでいい感じです。 pppd の場合は、PHS が接続してから 12 秒くらい待たされました。 これが数秒以内です。 やればできるんですね。 普通の回線で pppd していたときは、30 秒近く待たされていたような気がします。 よくなったものです。


2000/8/16 Wed

ruby-1.4.6 2000-08-16 リリース!

空いていた電車も、そろそろ?

意識の違い。 ちょっとしたことですが、「あれ?」って思ってしまいました。 「こんなに違うの?」って。 会社のディスプレイが液晶になって、奥行きがなくなった分、遠くに置くようにしたのでした。 15 インチなので、けっこう小さい感じにみえてしまいます。 これをみた私の直属の上司、「遠すぎて目に悪くない?」。 私は「えっ?」って思ってしまったのでした。 「文字が小さいから」というのが、理由だと思うのですけどね。 それにしても、目のことを考えているから行ったことを、逆にとられるとは思ってもみませんでした。 いやはや。 そうそう、私の上司、久しぶりに私がいるフロアにきたのでした。 普段まったく顔をみせなくて、ついでに出張も多くて、自分の部下の状態などは把握しなくてもいい上司ってなに? って感じ。 私的には気楽でいいんですけどね。 ビジネス的に上司と同じ方向を向かなくていい部下って、意味あるのかと思ってしまいますけど。 やっぱり人事上の関係って、同じベクトルを共有しないと、マネジメントがマネージしなくなりますよね? 自分に直接関係ないところを部下に持った上司も不幸かもしれませんが、引き受けた以上は、以下省略。

会社の机。 まったく整理整頓できていなかったので、整理をはじめました。 すこしはよくなるかな。 ベンチマークの資料などを受けとると、それがたまってしまって。 そのまま捨てられないというのもネックですね。 一応、セキュリティ的に分類してゴミ箱へ。 私のいるフロアって、普通のフロアとちょっと違って、こういうゴミ箱関係とかダメなんです。 総務にリクエストしたんですが、無視されてしまいました。 コストに見合わないのかな? 「いうだけ無駄」って思わせちゃうマネジメントが幅をきかせているような... (不満モード入っています)

ここしばらく体調いい感じです。 暑くて大変ではあるんですけど、けっこうすっきりした日々。 たまに、ちょっとだけ調子が悪いこともありますが、それは会社の空調が強すぎるときなど。 実際のところ暑いという方があっているのかな? 帰宅しても、ある程度はエアコン使っていますけど。 自分の熱で目が覚めちゃったときとか。 さて、いつまでもつかなぁ。

この業界でコンピュータをしらない新人さん。 自分のことを「こんなに頭の悪いとは思ってみなかった」とかいっています。 ちゃうと思うのですけど。 先輩たちはいろいろきっかけとなるようなことをしているんですが、なかなか引っかからないのでした。 なにか、「これ」って思うようなものをみつけて、ぐいぐい手繰りよせてほしいのですけどね。 システムの基礎的なことから、ネットワーク的なこと、プログラミングといろいろあるんですが。 私はネットワークのトラフィックとか「ほら」って、みせられたら「おおっ」と引っかかるタイプなんですが、こういうものがないと。 本人も自分がどういうことをしたいのかみつけられていないようです。 まじめに受けとるのでけっこう大変かも? 好きなことをみつけたらそれを伸ばしてやりたいと思っているんですが。 こういう考え方をそもそも否定する人もいますけどね。 まあ、仕事ですからそういうやり方ではなくて、「これ」ってこちらから押し付けてもいいんですけど。 私がそういうの嫌いだから。 さて、ないかに興味を示すといいのですが...

ノートパソコン。 ごろごろ寝たまま、お腹の上にノートパソコン。 照明がついていると目に入るので、消してしまって。 液晶の明るさもとても弱くして、MP3 を聴きながら。 なんて楽な姿勢であれこれできるんでしょう。 小さくて軽いというのはいいことですね。


2000/8/17 Thu

ふぅ。

mkdir する。 ftp で get するときに作ったものを流用。

mkdir コマンド
エラーのときの扱い(メッセージ)とか、おしゃべりモードとか入れれば本物そっくり? あ、mode 指定が違いますね。 私の環境では、いま cal, cat, df, env, from, getconf, hd(od), head, last, md5sum, mkdir, rg(grep), sleep, tail, tree, wc, who, xargs が Ruby です。 簡単なものは、どんどん Ruby しよう! 計画実施中? ls もつくりたいなと思っているのでした(自分が使うオプションのみ)。 ftp もできますね(簡易 version)。 さて?

候補探し。 普段どんなコマンド使っています? zsh の ~/.zsh_history からコマンド名だけひっぱりだして数えてみませんか?

#! /usr/local/bin/ruby
# /home/tetsu/src/ruby/junk/histpickup.rb
# Created: August 17,2000 Thursday 20:42:30
# Author: tetsu(WATANABE Tetsuya)

summary = Hash.new(0)

File.foreach(File.expand_path('~/.zsh_history')) do |line|
  line.scan(/;(\S+)/) do |cmd|
    cmd[0].sub!(/^.*\//, '')
    summary[cmd[0]] += 1
  end
end

summary.keys.sort.each do |cmd|
  print cmd, ' ', summary[cmd], "\n"
end
自分で作れそうなコマンド名があったら、インプリメントしてみません?

ちょっと懐かしい hd.rb の話。 Ruby をはじめたばかりのころのものですが、同じようなものをほしいと思っている方は多いようですね。 私もいまでもズーっと使っているし。 書き直したいと思いつつ。 hd.rb についてメールを受けとりました。 ありがとうございます。 私が Web で公開しているスクリプトは、サンプルとして使ってもらえればと思っているからです。 使ってみて、自分なりに工夫してもらえるのが一番だと思っています。 どうぞ、使ってくださいな。 Ruby を勉強するとき、なんらかのたたき台があって、自分の必要なところを修正しはじめるって勉強になりますよね。 hd.rb って、なんどか話題になるようなので、ちゃんと書き直してもいい感じですね。 さて、どうしようかな。


2000/8/18 Fri

夏休み。 今日は移動日。

きれいな空のいろ。 空気が違う感じ。 雲も夏って感じで。 いいな。 東京もこんな感じ空のいろなら、空気もいい感じなのに。 帰省の電車はガラガラでした。 反対方向の電車は混雑しているのですが。

家族用に PHS のカードを購入。 これで Win 上でネットに接続して、Web ブラウザでブラブラ。 ほしい情報を自分で探せるように。 変なところに引っかからなければいいけれど。


2000/8/19 Sat

のんびり。 すこし買い物にいった程度で、のんびりなのでした。

FTP#getbinaryfile などでの block size の話。 回線品質がいい場合は、たぶん変更の必要がないと思うのです。 でも、回線の品質が悪い場合は大きなパケットを使用していると、再送のコストが高くなるので、小さい方がいいです。 MTU のサイズ程度にしておくのがいいかもしれませんね。

寝転んで。 まくらを高めにして、ひざをたててノートパソコン。 なんというか、だらだらですね。 でも、腰にはよさそうですし?

ちょいゲーム。 落ちゲーなんですが、向いていないです私。 落ちるまでの間にちゃんと判断するのって難しいですね。 練習すれば上達するのかな? とも思うのですが、えーって感じ。 長期の休みは、なにかゲームをやっていたりすることが多いのですが、この夏休みは本格的なものには手をつけずに...


2000/8/20 Sun

ほのぼの?

私は Z shell を使っています。 いつ頃だったかな? 2.x のころから使いはじめたような、もうすこし前だったかな? csh, ksh, bash, zsh という経過ですが、いまのところ zsh が一番長く使っているし好きですね(曖昧ですけど)。 なにがいいかというと? ファイル名などの補完機能が充実していることと、HP-UX でもあれこれできたこと(tcsh もいい線いっていました)。 もともと B shell 系が好きで、シェルスクリプトなどは全部 B shell 系です。 でも、最初は csh 使っていました。 sh か csh しか選択肢がなかったのです。 けっこう矛盾した感じだったので、ksh がでたら乗り換えました。 その後 bash を使うようになり、ソースコードも読めて拡張もできたのでなかなかよかったです。 で、Z shell に出会ったのでした。 きっかけは社内の NetNews でどなたかが紹介していたからだったと思います。 Z shell ほど多くの機能は必要ないのですが、一部の csh の機能なども使えるので、私的にはもう他のシェルは使えません。 もう長く使っているので、自分がどんな Z shell の機能に依存しているかよくわかっていないのです。 たぶん、他のシェルにすると「あれ?」って思うことが多いでしょうね。

ちょっと中華。 お昼にてくてく歩いて、家族と中華を食べに。 中華って美味しいですね。 夏の昼間にてくてく歩くのって大変ですけど、いい感じ。 空も青くて、夏って感じの雲。 この辺かかなり長く雨が降っていないそうです。


2000/8/21 Mon

いい天気。

雑誌や書籍の視覚障害者の方への対応。 各社まちまちのようですね。 月刊アスキー 2000/9 で「ニュースのウラ側」という記事で視覚障害の方のパソコン事情という感じの記事がありました。 雑誌や書籍のテキストが手に入れば、もっと情報量が増えるのではないか? といろいろ考えさせられます。 現在の紙の媒体などは、けして情報としては使いやすいものではありません。 また、Win を前提にしたアプリや道具なども。 雑誌の記事などは、時間が経過したらすべて Web 上で公開するのはどうなのでしょう? レイアウトなどはシンプルの方が、テキストリーダ(読み上げ装置)にはいいと思いますし、手間はそれほどないと思うのですが。 どんどん、方向として「テキストとしてわかりやすいもの」が有効に利用されるようになるといいのですが。 関連して、NIFTY などでも質問があったりします。 視覚障害の方が、自分でテキスト処理を行ってテキストリーダに読ませやすい形に変換しているようです。 こういう部分で、Ruby や Perl などの使い方のドキュメントをもっと利用しやすい形にできるといいのですが。 どういう形が望まれているかが、よくわかりませんが、Web ブラウザなどは目が見えてはじめて直感的ですよね。 テキストが、もっともっとうまく扱えるようになるといいのですが。 Win のように GUI だけを前提としたシステムではなく、もっといろいろな人にとって使いやすいプラットホームがあるといいですね。 Linux や FreeBSD など、キャラクタを前提にしているシステム、オープンソースのシステム、活用されるといいんですけど。

ほのぼのゲーム。 「ぼくのなつやすみ」って、大人に受けているそうですね。 横で家族がプレイしているのをみていますが、ほのぼの。 せかせか細かくプレイすることもできそうですが、ゆっくりのんびりイベントまかせでプレイするとよさそうな感じ。 私も小学生ころ、山に虫取にいったりしたっけ。 こういうの、いいですね。 ただ、本当に山にいった方がいいかなと思いますけど。 乱獲はやめましょうね。

システム管理。 ファイルやディレクトリのパーミッションに弱い人っていますね。 私の周囲でも、あるシステムを任されているわりにまったくこういう概念が欠如しているというか、任すことが問題? いや、ちゃんとわかっている人をバックにつければいいと思うんですけどね。 ユーザからみても、こういうシステムを利用するときには、注意が必要です。 そこから、自分のシステムへの踏み台にされないように。 ちゃんと管理されているかどうか? というのはどうやって判断します? 簡単な確認なら次のスクリプトが使えそうです。 悪用しないでくださいね。

#! /usr/local/bin/ruby
# /home/tetsu/src/ruby/toolbox/find_w.rb
# Created: August 21,2000 Monday 15:17:27
# Author: tetsu(WATANABE Tetsuya)
# $Id: find_w.rb,v 1.2 2001/03/21 04:43:39 tetsu Exp $
# usage:

require 'find'

Find.find(ARGV.shift) do |f|
  st = File.lstat(f)
  Find.prune if st.symlink? ||
  (st.directory? && ! st.readable?) ||
    f == '/proc' ||
    f == ENV['HOME'] ||
    st.owned?
  print f, "\n" if st.writable?
end
同じものを find で書くとしたら? 条件がややこしくなってくると、Ruby などの方が便利ですね。 結果を xargs に渡して、実際にパーミッションを確認しましょう。 システム管理的な知識や考え方って、どうやって身につけます? 「背後霊」という話が fj にありましたね。 簡単な話、社内のシステムのような場合ちゃんと監査を行えばいいと思います。 部署内でもいいと思いますし。 うちの会社もあるんですが、最近あまり聞かないのはどうなっているのかな? これからのネット時代、外部からのアクセスについて、いろいろ手を打つことも重要ですし、システム内の設定も重要と思うのですけど。

sl って? みなさん、どうしています? 私は alias しているんですけど。 ほかにもすこしだけ alias しています。 タイプミス対策で。

Ruby でインプリしているコマンド。 数はかなりになっていますけど、alias で本来のコマンド名にしています。 つまり、head.rb があった場合 alias head=head.rb としています。 こうすることで、シェルスクリプトなどで引っかからないように。 自作のシェルスクリプトなら引っかかってもいいんですけどね。 実際にコマンドがどのように実行されたかの記録が残せれば(accounting ですね)、Ruby の起動率を数えられるのですが。 上にラッピングして、確認してみようかな?

18 日しめ切りっていっていたんですけどね。 今日でよかったのかぁ。 うーん。


2000/8/22 Tue

ls もどきをつくろうかな。

ということで、調査。 最初に、File#lstat の確認。 これ、OK ですね。 情報的には、これで ls -l がつくれます。

require 'etc'

def ll(name, fstat)
  puts '---'
  puts '%04o' % fstat.mode
  puts fstat.nlink
  p Etc.getpwuid(fstat.uid).name
  p Etc.getgrgid(fstat.gid).name
  puts fstat.size
  puts fstat.mtime
  puts name
end

Dir.open('.').each do |f|
  next if f == '.' || f == '..'
  fstat = File.lstat(f)
  ll(f, fstat)
end
次にパーミッション表示のための確認。 引数で指定したディレクトリ以下のパーミッションのパターンとその数の集計。 どのようなパーミッションがどのくらいあるかを代表的ファイル名も含めて。 この情報をもとに、パーミッション表示の方法について速度比較します。
require 'find'

mode = Hash.new(0)
mode2file = {}

Find.find(ARGV.shift) do |f|
  Find.prune if File.symlink?(f) ||
  (File.directory?(f) && ! File.readable?(f)) ||
    f == '/proc'
  j = sprintf('%o', File.lstat(f).mode)
  if mode[j] == 0
    mode2file[j] = f
  end
  mode[j] += 1
end

mode.keys.sort.each do |k|
  print k, ' ', mode[k], ' ', mode2file[k], "\n"
end
次のスクリプトはちょっと長いですが、集めた情報をもとにパーミッション表示の方法で速度比較。 計測結果として、すこしだけビット演算が速いのですが、文字列操作でも十分速いことがわかりました。 なんかすごいな。
def mode2str3(mode)
  m = mode.oct
  str = '----------'
  str[0] =
    if m & 0100000 == 0
      case m & 070000
      when 040000; 'd' when 060000; 'b'
      when 020000; 'c' when 010000; 'p'
      end
    else
      if m & 040000 == 0 then '-' else 's' end
    end
  str[1] = if m & 0400 == 0 then '-' else 'r' end
  str[2] = if m & 0200 == 0 then '-' else 'w' end
  str[3] = if m & 0100 == 0
	     if m & 04000 == 0 then '-' else 'S' end
	   else
	     if m & 04000 == 0 then 'x' else 's' end
	   end
  str[4] = if m & 040 == 0 then '-' else 'r' end
  str[5] = if m & 020 == 0 then '-' else 'w' end
  str[6] = if m & 010 == 0
	     if m & 02000 == 0 then '-' else 'S' end
	   else
	     if m & 02000 == 0 then 'x' else 's' end
	   end
  str[7] = if m & 04 == 0 then '-' else 'r' end
  str[8] = if m & 02 == 0 then '-' else 'w' end
  str[9] = if m & 01 == 0
	     if m & 01000 == 0 then '-' else 'T' end
	   else
	     if m & 01000 == 0 then 'x' else 't' end
	   end
  str
end

def mode2str2(mode)
  m = mode.oct
  str = '----------'
  str[0] =
    if m & 0100000 != 0
      if m & 040000 != 0 then 's' else '-' end
    else
      case m & 070000
      when 040000; 'd' when 060000; 'b'
      when 020000; 'c' when 010000; 'p'
      end
    end
  str[1] = if m & 0400 != 0 then 'r' else '-' end
  str[2] = if m & 0200 != 0 then 'w' else '-' end
  str[3] = if m & 0100 != 0
	     if m & 04000 != 0 then's' else 'x' end
	   else
	     if m & 04000 != 0 then 'S' else '-' end
	   end
  str[4] = if m & 040 != 0 then 'r' else '-' end
  str[5] = if m & 020 != 0 then 'w' else '-' end
  str[6] = if m & 010 != 0
	     if m & 02000 != 0 then 's' else 'x' end
	   else
	     if m & 02000 != 0 then 'S' else '-' end
	   end
  str[7] = if m & 04 != 0 then 'r' else '-' end
  str[8] = if m & 02 != 0 then 'w' else '-' end
  str[9] = if m & 01 != 0
	     if m & 01000 != 0 then 't' else 'x' end
	   else
	     if m & 01000 != 0 then 'T' else '-' end
	   end
  str
end

def mode2str(mode)
  str = ''
  if mode.size == 6
    if mode[-6].chr == '1'
      str.concat(if mode[-5].chr == '4' then 's' else '-' end)
    end
  else
    str.concat(case mode[-5].chr
	       when '4'; 'd' when '6'; 'b'
	       when '2'; 'c' when '1'; 'p'
	       end)
  end
  str.concat(case mode[-3].chr
	     when '0'; '---' when '1'; '--x'
	     when '2'; '-w-' when '3'; '-wx'
	     when '4'; 'r--' when '5'; 'r-x'
	     when '6'; 'rw-' when '7'; 'rwx'
	     end)
  str.concat(case mode[-2].chr
	     when '0'; '---' when '1'; '--x'
	     when '2'; '-w-' when '3'; '-wx'
	     when '4'; 'r--' when '5'; 'r-x'
	     when '6'; 'rw-' when '7'; 'rwx'
	     end)
  str.concat(case mode[-1].chr
	     when '0'; '---' when '1'; '--x'
	     when '2'; '-w-' when '3'; '-wx'
	     when '4'; 'r--' when '5'; 'r-x'
	     when '6'; 'rw-' when '7'; 'rwx'
	     end)
  case mode[-4].chr
  when '1'; str[-1] = if str[-1].chr == 'x' then 't' else 'T' end
  when '2'; str[-4] = if str[-4].chr == 'x' then 's' else 'S' end
  when '4'; str[-7] = if str[-7].chr == 'x' then 's' else 'S' end
  when '6'
    str[-4] = if str[-4].chr == 'x' then 's' else 'S' end
    str[-7] = if str[-7].chr == 'x' then 's' else 'S' end
  end
  str
end

require 'benchmark'

sum1 = 0.0
sum2 = 0.0
sum3 = 0.0

while DATA.gets
  next if /^#/ || /^\s*$/

  perm, mode, count, f = split
  j = mode2str(mode)
  i = mode2str2(mode)
  k = mode2str3(mode)

  if j != perm
    p mode
    p perm
    p j
  end
  if i != perm
    p mode
    p perm
    p i
  end
  if k != perm
    p mode
    p perm
    p k
  end

  b1 = Benchmark.new
  b1.start
  0.upto(count.to_i) do
    j = mode2str(mode)
  end
  b1.stop

  b2 = Benchmark.new
  b2.start
  0.upto(count.to_i) do
    i = mode2str2(mode)
  end
  b2.stop

  b3 = Benchmark.new
  b3.start
  0.upto(count.to_i) do
    k = mode2str3(mode)
  end
  b3.stop

  print b1, ' '
  sum1 += b1.to_f

  print b2, ' '
  sum2 += b2.to_f

  print b3, "\n"
  sum3 += b3.to_f
end

p sum1
p sum2
p sum3

__END__
---x--x--- 100110 1 /usr/sbin/in.ftpd
---x--x--x 100111 6 /usr/sbin/visudo
-r-------- 100400 3 /etc/gshadow
-r--r----- 100440 2 /etc/sudoers
-r--r--r-- 100444 10048 /etc/kinput2/rule.zascii
-r-x------ 100500 13 /usr/sbin/ppxpadduser
-r-x--x--x 100511 1 /sbin/pam_filter/upperLOWER
-r-xr-x--- 100550 46 /etc/rc.d/rc.news
-r-xr-xr-x 100555 905 /sbin/quotaon
-rw------- 100600 923 /.bash_history
-rw-r----- 100640 24 /etc/news/storage.conf
-rw-r--r-- 100644 98172 /root/.xmodmaprc
-rw-rw-r-- 100664 184 /etc/syslog.conf
-rw-rw-rw- 100666 4 /etc/asound.conf
-rwx------ 100700 25 /bin/linuxconf
-rwx--x--x 100711 7 /usr/sbin/suexec
-rwxr--r-- 100744 13 /root/GNUstep/Library/WindowMaker/autostart
-rwxr-x--- 100750 1 /usr/lib/news/bin/control/filter_innd.pl
-rwxr-xr-- 100754 1 /usr/sbin/makewhatis
-rwxr-xr-x 100755 4117 /sbin/setpnp

-rwxr-xr-t 101755 2 /usr/bin/emacs

-r-xr-sr-x 102555 2 /usr/bin/jman
-rwxr-sr-x 102755 8 /sbin/netreport

---s--x--x 104111 1 /usr/bin/sudo
-r-s--x--x 104511 1 /usr/bin/passwd
-r-sr-x--- 104550 3 /usr/bin/startinnfeed
-r-sr-xr-x 104555 6 /sbin/pwdb_chkpwd
-rws--x--x 104711 7 /usr/bin/newgrp
-rwsr-x--- 104750 1 /home/t/bin/tm
-rwsr-xr-x 104755 26 /sbin/lspci

-r-sr-sr-x 106555 8 /usr/sbin/uuxqt
-rwsr-sr-x 106755 2 /usr/sbin/sendmail

srw-rw-rw- 140666 1 /dev/log
srwxr-xr-x 140755 2 /tmp/.kon1
srwxrwxrwx 140777 3 /tmp/.X11-unix/X0

prw------- 10600 1 /dev/initctl

crw------- 20600 388 /dev/midi04
crw--w---- 20620 132 /dev/vcsa9
crw-r----- 20640 6 /dev/port
crw-r--r-- 20644 13 /dev/usbmouse0
crw-rw---- 20660 530 /dev/zqft3
crw-rw-r-- 20664 66 /dev/usb/rio500
crw-rw-rw- 20666 547 /dev/ttyS15

dr-xr-xr-x 40555 18 /usr/lib/netscape/ja/nethelp/netscape
drwx------ 40700 29 /home/tetsu.org/.xauth
drwxr-x--- 40750 2 /root
drwxr-xr-x 40755 4611 /
drwxrwx--- 40770 2 /etc/uucp
drwxrwxr-x 40775 130 /m/u
drwxrwxrwx 40777 4 /tmp/.ki2-unix

drwxrwxrwt 41777 7 /tmp
drwxr-sr-x 42755 12 /usr/doc/kernel-doc-2.2.16/ja

brw------- 60600 1 /dev/hdc
brw-r----- 60640 27 /dev/xdb8
brw-rw---- 60660 3422 /dev/sjcd
これの実行結果はこんな感じ。 出現回数がすくないものは省略しています。
0.000112 0.000112 0.000108 ---x--x---
0.000869 0.000360 0.000342 ---x--x--x
0.000181 0.000209 0.000201 -r--------
0.000154 0.000161 0.000153 -r--r-----
0.714367 0.569372 0.544082 -r--r--r--
0.003929 0.000707 0.000661 -r-x------
0.000103 0.000110 0.000107 -r-x--x--x
0.002812 0.002305 0.002192 -r-xr-x---
0.069161 0.051929 0.046353 -r-xr-xr-x
0.060045 0.053078 0.047424 -rw-------
0.004469 0.001259 0.001170 -rw-r-----
7.317669 5.559734 5.344759 -rw-r--r--
0.013138 0.009581 0.012495 -rw-rw-r--
0.000299 0.000259 0.000246 -rw-rw-rw-
0.001158 0.001280 0.001214 -rwx------
0.000385 0.000402 0.000383 -rwx--x--x
0.000750 0.000755 0.000664 -rwxr--r--
0.000114 0.000111 0.000106 -rwxr-x---
0.000125 0.000112 0.000107 -rwxr-xr--
0.328387 0.233052 0.223050 -rwxr-xr-x
0.000194 0.000163 0.000153 -rwxr-xr-t
0.000186 0.000160 0.000152 -r-xr-sr-x
0.001133 0.000458 0.000434 -rwxr-sr-x
0.000106 0.000112 0.000107 ---s--x--x
0.000114 0.000113 0.000106 -r-s--x--x
0.000227 0.000210 0.000199 -r-sr-x---
0.000421 0.000354 0.000337 -r-sr-xr-x
0.003894 0.000447 0.000385 -rws--x--x
0.000122 0.000111 0.000107 -rwsr-x---
0.001615 0.001324 0.001256 -rwsr-xr-x
0.000595 0.000450 0.000430 -r-sr-sr-x
0.000219 0.000161 0.000153 -rwsr-sr-x
0.000127 0.000112 0.000106 srw-rw-rw-
0.000198 0.000162 0.000152 srwxr-xr-x
0.000252 0.000210 0.000199 srwxrwxrwx
0.000102 0.000119 0.000114 prw-------
0.023401 0.025105 0.023174 crw-------
0.006315 0.010352 0.006461 crw--w----
0.000331 0.000961 0.000364 crw-r-----
0.000721 0.000735 0.000699 crw-r--r--
0.035540 0.031709 0.030191 crw-rw----
0.006703 0.003505 0.003259 crw-rw-r--
0.043373 0.032460 0.032692 crw-rw-rw-
0.000946 0.000947 0.000897 dr-xr-xr-x
0.001241 0.001545 0.001424 drwx------
0.000156 0.000162 0.000154 drwxr-x---
0.339799 0.262821 0.252311 drwxr-xr-x
0.000164 0.000162 0.000153 drwxrwx---
0.010829 0.006399 0.006055 drwxrwxr-x
0.000288 0.000259 0.000246 drwxrwxrwx
0.000483 0.000407 0.000390 drwxrwxrwt
0.000758 0.000658 0.000613 drwxr-sr-x
0.000098 0.000114 0.000109 brw-------
0.001241 0.001416 0.001419 brw-r-----
0.231192 0.202486 0.191232 brw-rw----
9.231311
7.071757
6.78205
何度か実行してみましたが、傾向はほぼ同じようです。 それぞれ得意と不得意があるようですね。 プロファイラをとってみたらおもしろいかな?

むかしの ls -lF コマンドくらい? 「いろ」などはありませんけど。

入れ替えちゃいました
扱うファイルが多いときのためにいくつかキャッシュしたほうがいいものがあります。 現在時間の Time#now と uid からの変換と gid からの変換です。 ファイルの情報を扱えるということは、基本なのでみなさんも ls コマンドつくってみません? C で書くと大変ですけど、Ruby だとこんな感じでできてしまいますよ。 Ls クラスを作成して、情報をキャッシュしてみました。 やっぱり、キャッシュすると効果ありますね。 これなら、パーミッションパターンもキャッシュです。 パーミッションのキャッシュは、一番最初に考えていました。 すべてのパターンを、先につくっておいて Hash クラスに入れておく。 先につくっておくのは無駄が多そうなので、動的に Hash ですね。 これでなかなかいい感じです。 さて、「いろ」はどうしましょうか? それと -a (の逆)とか -t とかのオプションもほしいかな。


2000/8/23 Wed

文章書いているよりプログラムを書く方が楽しいな。 困ってしまう。

やっぱりデータベースの運用って、経験が必要ですよね。 それと、実験に使えるシステム。 あれこれ悩んだときにどうやったらいいか? というのは、とても難しいです。 本番システムでは、特に手をだしにくいです。 こういう場合のことを考えて、小さなシステムでいいから (Linux でもいいし) 実験機があるといいともいます。 運用担当者に、こういう環境を用意せずに「やれ」っていうのは、私的には怖くてできません。 世の中いろいろなんですね。

UNIX になれてもらうために。 新人さんに Apache をインストールしてもらうようにお願いしました。 Web サーバの知識は、自分でも活用できる道具になるので、勉強してもいいかなと思うのでした。 いろいろ引っかかっているようです。 こういう経験が大切だと思うので、課題をだしていかないとダメかも。 勝手に育っていく人は、黙っていてもやってしまうようなことでも、こちらから課題にしないと? 通信時間は 52:17 でした。

ll ってコマンド。 作成した ls -l コマンド、普段 alias ll='ls -lF' の代わりに使用することにしました。 実際使用するとなると -a や -t, -u, -c などの時間ソート関係とソートなしの -f などもほしくなって追加。 200 行を越えてしまいました。 いろのサポートはありませんけど、これであまり困らない感じになったのでした。 すこし、いろのサポートしたいかなとは思っているんですけど、さてさて。

入れ替えちゃいました
ロジックがわかりにくいかな? ごちゃごちゃ追加していったし。 私が ll というコマンド名(指癖)で使っているものです。 昨日のものよりはちゃんとしているはずなんですが、想定していない使い方には弱いかも。

自作コマンドなど、システムで提供されている以外のコマンドの管理。 私の場合は、/t という別パーティションにフリーソフトなどあとからソースをコンパイルして入れたものをまとめています。 バイナリは /t/bin に入ります。 そのまま PATH を通すと、使わない余計なものやシステムとぶつかるものも入ってしまったりします。 そのため、/t/bin から /usr/local/bin に必要なコマンドのみシンボリックリンクを張っています。 RPM などで提供されるツールでも /usr/local を使っているものなどもあるので、/usr/local を別パーティションで管理というのはやっていません。 システムの大幅な入れ替えなどでも、/t を残しておけば、わりと短時間で作業ができます。 自作コマンドについては、最近は Ruby ばかりなのでファイル名が foo.rb 的に拡張子がついています。 このまま拡張子ありでも使えますが、普通のコマンドを置き換えるようなものも多いので、シェルで alias しています。 こうするとシェルスクリプト時には、本来のコマンドが呼ばれます。 自作系は ~/bin に入れているので、システムへの影響はありませんけどね。 一時期、~/bin はあまり多くのものを登録しないようにしていました。 いま、50 くらいあるようです(使っていないものもありますけど)。 バイナリだと、可搬性が悪いからです。 現在は Ruby で書いているので、ほとんどどこでも使えるのでなかなかいいです。 作ったものがホント資産になりますね。

本日から、月単位のページに、カレンダー形式の目的の日付にジャンプできるようにリファレンスをつけました。 以前、CGI 用のカレンダーを作成していたので、それをちょっとだけ修正して。 当日より前は、必ずあるものとして。 これでいいのかな? 他の月のページも入れておこうかな?

Ruby にラッピング。 起動回数を計測。 8/21 21 時から 8/23 15 時までで 500 回。 基本コマンドも Ruby なので、さすがにかなりの数いきますね。 さて、ネタはいくつか増えてきたのですが、これを文字にするのが問題かな。 入門書ってなかなか。


2000/8/24 Thu

ruby-1.5.5 2000-08-24 です。

目がゴロゴロ。 なんでしょう? なんでしょう? モノモライじゃないようです。 眼球の一部が赤くなってゴロゴロ。 やだなぁ。

ll スクリプト。 使っているユーザさんはいないと思いますが、ちょっと修正したので。 時間によるソート時に、第二キーとしてファイル名を入れました。 カラーも一部サポート。 カラーは、コードをそのまま入れています。 /etc/DIR_COLORS みにいっていません。

入れ替えちゃいました
個人的にはけっこう満足なんですが、/etc/DIR_COLORS も使うかな? ただ、基本的な部分しかいろをつけるつもりはないのですけど...

「MATRIX」観ました。 いまさらですが、「攻殻機動隊」も。 どちらもいいですね。 こういうのがいつでも観ることができるというのはすごいかも。 長期休暇恒例の DVD 鑑賞でした。

朝はけっこう涼しいです。 日中も涼しければいいのですが、かなり暑くて...


2000/8/25 Fri

ruby-1.6.0 2000-08-24? かな。 という感じです。

#define RUBY_VERSION "1.6.0"
#define RUBY_RELEASE_DATE "2000-08-24"
#define RUBY_VERSION_CODE 155
#define RUBY_RELEASE_CODE 20000824
正式にはまだかな? と思いますが、1.6 系ですね。

もうすぐ「ぼくのなつやすみ」も終わり。 今年の夏は、あまりイベント的なことはなかったかな。 あ、これゲームの話ではなくて私の休み。

ll スクリプト。 /etc/DIR_COLORS もサポートしました。 100 行からはじまったのですが、284 行にもなってしまいました。 初期の目的以上のものができてしまったのですが、使うとなるとそれなりに必要な機能なので。 オプションの -F なしとか、オプションでいろなしとか指定できたほうがよさそうです。 残りはこれくらいかな?

会社への接続時間。 25:50 と 12:05 でした。

技術者としての突っ込み。 技術屋さんだったら、どうして疑問に思ったら突っ込まないの? というフォローがあったりします。 具体的にそう書いてはいませんけど、「どうして試さないの?」という感じ。 アプローチの方法が「あれ?」ということは、いろいろあると思いますが、全然手をつけずに判断してしまうのは悪い傾向かなと? さあて、どんな風に育っていくのかな...

家族全員で夕食を食べに。 休みの日に昼食は、よく食べにいっていたのですが、夕食はたいてい自宅でした。 めずらしく? 中華だったのですが、なかなかよかったです。 でも、ちょっと量が多かったかな。 これ、会社のアワードを使ったのでした。


2000/8/26 Sat

うーん、長い休みのつもりだったのに、早い早い。

ls のいろ。 Emacs の M-x shell でいろで困るということはオプション --color=tty すると OK かな。 私の ll.rb もそうですけど、いろが使えるターミナルタイプのときだけに動作するように指定できますよ。 shell-mode では ~/.zshenv などで

if [ "$TERM" = "dumb" ]; then
 unset LS_OPTIONS
 unset LS_COLORS
else
 export LS_OPTIONS='--color=auto'
 export LS_COLORS='di=01'
fi
として、~/.zshrc で alias するとか。
alias ll='ls $LS_OPTIONS -lF'
alias ls='ls $LS_OPTIONS -F'
alias sl=ls
shell-mode は、これで大丈夫と思います。 ll.rb (1.11) も shell-mode で問題なく使えていますよ。
Ruby のコマンドシリーズのページをちゃんとまとめたいな。

すこし遠くへ買い物へ。 家族は収穫物あり。 よかったよかった。 マウスも使いなれないと、なかなかなんですね。 最初にパッドというのも? めずらしいゲーム CD もみつけて、よかったという感じ(家族が)。

夜、家族全員で花火を観ました。 いやー、やっぱり花火ってこうじゃなくちゃという感じ。 休みなく 50 分間。 自宅前の道路が、花火見物にはかなりいい場所なので、そのあいだわいわいいいながら。 公道なので、敷物とビールというわけにはいかないのですけどね。 それにしても、久しぶりにまともに花火をみた気がします。 学生の頃、引っ越し先での花火は休み休みの花火でずいぶんさびしいものでした。 ここの花火の印象があったためと思いますけど。 よかったよかった。

du.rb を。 ll.rb も一段落したので。

du コマンド
最初、再帰を使わずに書いたのですが出力結果の順番などちょっと悩みました。 du は、もともと再帰で書かれていると思うので、再帰が自然ということでこの形に。 再帰処理の例にちょうどいいかも?

横でドラクエ。 プレイしているのをみながら。 はじめると楽しいんだろうな。


2000/8/27 Sun

もう夏休みも終わりかぁ。

たくさん積み残した感じ。 だめだなぁ。 って、休みなのに予定だけがたくさんあったということ?

夏祭り。 ちょうど時期をはずしてしまったというか、祭り本番の日に戻らなくてはならないスケジュール。 わかっていたんですが、いま思うとやっぱりスケジュールミスかな。 というか、もっと長期の休みがほしいと思っていたりするのでした。


2000/8/28 Mon

ruby-1.6.0 2000-08-28 リリースです。 あれれ、次のスクリプトがループに入り込んでしまいます。

require 'English'
require 'English'

移動日。

むかし? にくらべると移動はとても楽になったのですが、やっぱり移動は大変。 もっと移動距離があったころでも、むかしは若かったからかな? 帰り道にお茶の水の本屋さんへいったりしたのに。 いまは、帰ってきて寝るだけ。 あらまぁ。

明日の準備しないと?

この休み、文章は書けなかったけれど、プログラムが書けたので「ごめんなさい」(意味不明かな)と思いつつ、よかったです。 考えをまとめるという意味でいい休みでした。 文章の方は、これを使って書ければいいなと思うのでした。 サクサク書けるといいな。 パターンができると書けるようになるんですけどね。


2000/8/29 Tue

ruby-1.6.0 2000-06-29 です。 クラス変数が落ち着いてよかったです。

久しぶりの仕事。 まあ、ネットでアクセスしていましたけど。

大きなことはないのですが、細かなフォローをしていると一日が終わってしまいました。 久しぶりなのでいろいろ情報収集もしたかったのですが、それもできずに。 まあ、今週は大きな予定もないので、じょじょに。 課題をクリアするタイプの勉強方法も、相手によってかなり。 もっと細かくフォローが必要かなと思うのですが... 反応が...

CD を購入。 STRANGE DAWN と FF9 を。 どちらも音楽はとてもいい感じ。 あ、まだ CD は聴いていないのですが。 帰ってきてからクリッピングをしていたら、寝てしまったのでした。 ふう。

1994 年の方が暑かったんですね。 今年も暑いですが、6 年前の方が暑かったそうです。 そういえば、その年に手術をしたんだっけ。 私が手術をしていたとき、家族が外で待っていたら東京の最高気温が記録に残るような温度だったとか。 あれからもう 6 年か。


2000/8/30 Wed

ruby-1.6.0 2000-08-30 です。

八月も終わりですね。

Debian の同人誌? http://www.debuan.org/ Deぶan BNU/Linux不徹底入門 新しいものがでていますね。 いいなぁ、こういうの。

プログラム作り。 やっぱり、会社に行っているとペースが落ちますね。 夏休みの間にいくつか作れたのはよかったです。 文章をまとめる方はパターンを考慮中でなかなか。 応用編の方を先に書きたくて困った感じです。 あらまぁ。

家族と E-mail を。 いいですね。 PHS でメールというのは、即時性が高くて、これもおもしろいのですけど。 PC を使ってのメールは、PPP 接続なので即時性は落ちますけど、でも「書く」ことは、楽ですし。 読みたいタイミングで読めるのもなかなか。


2000/8/31 Thu

ruby-1.6.0 2000-08-31 です。 再現できる小さなスクリプトが書けないのですけど、core しています。 ロジックとかではなくて、文字列の数とかコードの微妙な違いで core します。 頻発するのではなく特定のスクリプトだけで起きているのがなんとも...

#0  rb_call0 (klass=717285476, recv=717285496, id=9017, argc=1, argv=0x7fffe418, body=0x2ac13aa8, nosuper=0) at eval.c:4154
4154                    *local_vars++ = (VALUE)body;
(gdb) bt
#0  rb_call0 (klass=717285476, recv=717285496, id=9017, argc=1, argv=0x7fffe418, body=0x2ac13aa8, nosuper=0) at eval.c:4154
#1  0x8058f86 in rb_call (klass=717285476, recv=717285496, mid=9017, argc=1, argv=0x7fffe418, scope=0) at eval.c:4327
#2  0x8054acc in rb_eval (self=717438256, n=0x2ac23a0c) at eval.c:2412
#3  0x8053c49 in rb_eval (self=717438256, n=0x2ac239bc) at eval.c:2149
#4  0x805468a in rb_eval (self=717438256, n=0x2ac23980) at eval.c:2389
#5  0x805344f in rb_eval (self=717438256, n=0x2ac26c34) at eval.c:1931
#6  0x805197b in eval_node (self=717438256, node=0x2ac26c34) at eval.c:1026
#7  0x8051bb4 in ruby_run () at eval.c:1119
#8  0x8050764 in main (argc=3, argv=0x7ffff934, envp=0x7ffff944) at main.c:45

すこし気温が下がってほしいです。 ホント。

Web ページの紹介サイト(ユーザー参加型情報サイト?)で、ここを紹介してくれるそうです。 はじめ、紹介の意図がわからなかったので、リプライするのに困っていたのですが Ruby 関連ページとして紹介されることがわかり安心しました。 Ruby Home Page も登録されていました。 http://www.boook.com/ です。 ユーザを巻き込んで、Web ページを評価? して、さがしている人にとっていいページを紹介する? こういうサービスって、どこで成り立っているのかな? 広告かな?


渡辺哲也(WATANABE Tetsuya): Tetsuya.WATANABE atmark nifty.com