おまぬけ活動日誌

最近のツッコまれどころ

この日誌から Google してもらう


2002年06月06日(Thu) そういえば昨日は久しぶりに背広を着て自転車で走ってたら…

のぼせて鼻血ぶーになってしまったんだった。背広に血痕を残さずに済んで幸い。

rubyの便利なメソッドたち

本職で使うのに、「Ruby in a nutshell」をパラパラとめくっていて、FileUtils.mkdir_pというメソッドを発見しました。

require 'fileutils'
FileUtils.mkdir_p ('/home/hoge/fuga/moge')

すると、/home/hoge/fugaが無い場合でも、mkdir -pのように順番に作ってくれます。/a/付近のスクリプトにもこのような操作が必要なところがあって、これまでは、WWWでみつけたスクリプト片をコピーさせてもらって使っていたのですが、rubyに標準で付いてきていたとは。

こういうメソッドを効率的に発見するのには、やっぱり他の方が書いたスクリプトを読むのが一番なのかな?rd2とnamazuと組み合わせて逆引きマニュアルのようなのも作れそうな気もしてくるのですが、きっとどこかにあるんだろうな。

本日のツッコミ(全3件) [ツッコミを入れる]

> anego [背広ってのぼせちゃうものなんですか? といふ素朴なギモソ。 いあ、決して前の自転車のおねいさんの太モモが、とかとかと..]

> UmaShika [うーむ、よほどピッチリした背広でも着ていたのだろうか?]

> ずんだあん [上着もしてネクタイもしてた上に他の人はTシャツで歩いてるくらいの陽気だったのです、トイウコトニシテオイテクダサイマシ..]


2003年06月06日(Fri) じじい化zunda

晩ご飯をたべてすぐ寝る、朝早く起きてシゴトをする。もしかしたら調子よくなってきてるかも。

[iiimf] iiimf-11.1.1280ではATOXが使えない

がーん。やっぱATOX持ってる人にメンテナンスしてもらわないとだめだねぇ。どうしよう。

r11_2は未だにmake installできてなかったりするのだ…。

(追記)Toshiさんも困っておられる…。

カバンの中身が外から分かるICタグ 個人のプライバシは守れるか

IT Proより、いつも同じIDを持っていることで、 その人が誰かを特定できてしまうという欠点に対応するために、

これを解決するには,IDの読み取りそのものを制限する必要がある。 例えばIDを読み取るのにパスワードを設定する。 さらに,平文でやり取りすると盗聴の恐れがあるので, ICタグに暗号化の機能などを入れておく。

と書いてあった。これって、 僕が以前考えたのと同じ対策だよね。 前にも書いたように、RFIDタグの応答を模倣するデバイスを作れば、 通信路が暗号化されていようともパスワードを盗まれる危険があると思うんだけど、 違うのかなあ…。 スキャナがIDをもらうためにパスワードを送る先って、 sshでやってるみたいに、特定のRFIDタグに限定しちゃうわけにはいかないよね。

[tDiary] お天気プラグイン(1.4)

データの古さチェックをするようになり、 towering cumulus cloudsの訳語を追加しました。 必要なかたは、tDiaryのCVSから更新するか、上記からダウンロードしてください。

[%r|\s*\bcumulus clouds\b\s*|i, '"積雲"'],
[%r|\s*\btowering\b\s*|i, '""'],

デフォルトでは、天気データが日記を書いた時点で6時間以上古いと、 data too oldのエラーと共に記録します。 その結果、デフォルトでは天気が表示されず、 次の日記の更新の機会に再び天気データを取得するようになります。 許す古さを変更したい場合は、tdiary.confで

@options['weather.oldest'] = 21600

のように秒数を指定してください。 これをnilにすると、データの古さのチェックをしなくなります。

…とここまで書いて、プラグイン内のドキュメントのtypoをみつけてしまった。 このサイト内のものは直っていますが、CVSの方は、 次のcommitで修正します。(いつ?)

[memo] tsort

IBM developerWorksより。sortは時々使うけどtsortっていうのもあるのですね。

man tsortより、

tsort - 有向グラフのトポロジカルなソートを行う

ほへ?とりあえず試してみよう。

$ tsort << END
> perl ruby
> lisp ruby
> ruby tdiary
> END
lisp
perl
ruby
tdiary

わかったようなわからいような…。 なんだかすごおく便利そうな気もするんだけど、 どういう時にやくにたつのか具体的に思いつけないです。へたれ。

あ、RPMパッケージの依存関係からインストール順を決めるとか、かな?

本日のツッコミ(全3件) [ツッコミを入れる]

> むらけん [単純にトポロジカルソートしてるだけじゃ...]

> むらけん [追記すると,ruby にも tsort.rb ってのが 1.8 から附属してるのよ.だから,ruby-shim が入..]

> zunda [なるー。 でもコマンドとしてどういう事例につかうのかよーわからんのですだ。]


2004年06月06日(Sun) 広いところで初フライト

気持ちよかった

[memo] viで現在行を画面の中央に移動するのは「z.」

ぽちネット-Linux備忘録-Hints&Tips-viエディターの使い方より。「M」じゃファイルの内容が付いてきてくれないしなーと悩んでました。zで始まるコマンドは沢山あるみたい。:help zで見られる。ちょっとずつ覚えていこうかな。

FreeBSD挫折気味

xdviがフォントを見つけてくれないのです。あるいはインストールしなくちゃいけないのかもしれない。

…とりあえずX端末として使っておこう T_T

本日のツッコミ(全2件) [ツッコミを入れる]

> シンX [/usr/ports/japanese/xdvik-vflib を install しても だめだったのでしょうか?]

> zunda [ありがとうございます。xdvik-vflibも、fontの名のつくportsも全て入れたのですが(おかげさまでasa..]


2005年06月06日(Mon) ビール飲み過ぎで起動が遅いです

なんちて

Pythonの起動は遅い(かもしれない)

enbug diaryより。へぇ。ちょっと手元でも実験してみました。

$ time perl -e ''
real    0m0.003s
user    0m0.000s
sys     0m0.003s
$ time ruby -e ''
real    0m0.005s
user    0m0.003s
sys     0m0.002s
$ time python -c ''
real    0m0.016s
user    0m0.011s
sys     0m0.005s

ほんとだ。perl, v5.8.5、ruby 1.8.3、Python 2.3.4です。

straceするとシステムコールの回数がわかるのかな。

$ strace perl -e '' 2>&1 | wc -l
141
$ strace ruby -e '' 2>&1 | wc -l
121
$ strace python -c '' 2>&1 | wc -l
718

ふむふむ。じゃあ起動して終了するまでにreadしたバイト数。

$ strace -e trace=read perl -e '' 2>&1 | awk '{s+=$NF}END{print(s)}'
4132
$ strace -e trace=read ruby -e '' 2>&1 | awk '{s+=$NF}END{print(s)}'
3104
$ strace -e trace=read python -c '' 2>&1 | awk '{s+=$NF}END{print(s)}'
142929

1.5桁ほどちがいますね。バイトコードを実行するようになってるあたりが違うのでしょうか?

$ strace -e trace=open python -c '' 2>&1 | grep -v ENOENT | lv

なんだか日本語エンコーディング関連のようなファイル名が沢山見えました。ならば、

$ LANG=C time python -c ''
0.00user 0.00system 0:00.02elapsed 65%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+606minor)pagefaults 0swaps

速くなった?

$ LANG=C time perl -e ''
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+309minor)pagefaults 0swaps
$ LANG=C time ruby -e ''
0.00user 0.00system 0:00.00elapsed 60%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+358minor)pagefaults 0swaps

うんにゃ。しかしロケールでtimeの出力が違うのにびっくり。(追記:普段はja_JP.EUC-JPになってます。、下にもっと追記)

readしたバイト数をファイル名に関連づけられるともう少しいろいろわかるのでしょうけど、また今度にしまーす。

(もっと追記)timeの出力が変化するのはロケールのせいじゃなかったです。LANG=ja_JP.EUC-JP time …でもLANG=Cを付けた時と同じ出力が得られました。コマンドラインの最初にtimeを書くとbashの予約語のtimeとして解釈されて、LANG=…の後にtimeを書くとコマンド名として解釈されて/usr/bin/timeが実行される、というのが真相のようです。失礼しました。

straceからファイル名と読んだデータの大きさを得る

そういうわけで簡単なスクリプトを作ってみました。ファイル名にダブルクォーテーションが含まれてたりするとどうなるか知らない。

#!/usr/bin/ruby
# Copyright 2005 by zunda at freeshell.org, distributed under GPL

fds = Hash.new
bytes = Hash.new( 0 )
ARGF.each do |line|
  if /^open\("([^"]+)",[^)]+\)\s*=\s(\d+)/ =~ line then
    path = $1
    fd = $2.to_i
    fds[fd] = path if fd >= 0
  elsif /^read\((\d+),[^)]+\)\s*=\s(\d+)/ =~ line then
    fd = $1.to_i
    byte = $2.to_i
    bytes[fds[fd]] += byte
  end
end
bytes.to_a.sort_by{|x| x[1]}.reverse.each do |x|
  puts "#{'%5d' % x[1]} bytes from #{x[0]}"
end

ここではstrace.rbというファイル名にしてあります。結果はというと、

$ LANG=C strace perl -e '' 2>&1 | ruby strace.rb  | head -5
  512 bytes from /lib/tls/libpthread.so.0
  512 bytes from /lib/libutil.so.1
  512 bytes from /lib/tls/libm.so.6
  512 bytes from /lib/tls/libc.so.6
  512 bytes from /usr/lib/perl5/5.8.5/i686-linux-thread-multi/CORE/libperl.so
$ LANG=C strace ruby -e '' 2>&1 | ruby strace.rb  | head -5
  512 bytes from /lib/tls/libpthread.so.0
  512 bytes from /lib/tls/libm.so.6
  512 bytes from /lib/tls/libc.so.6
  512 bytes from /usr/lib/libruby.so.1.8
  512 bytes from /lib/libcrypt.so.1
$ LANG=C strace python -c '' 2>&1 | ruby strace.rb  | head -5
28530 bytes from /usr/lib/python2.3/codecs.pyc
27272 bytes from /usr/lib/python2.3/os.pyc
14433 bytes from /usr/lib/python2.3/posixpath.pyc
11831 bytes from /usr/lib/python2.3/UserDict.pyc
11787 bytes from /usr/lib/python2.3/site.pyc

へぇ。バイトコードになったPythonスクリプトをたくさん読んでるのかな?

perlでもrubyでも、そしてpythonでも、共有オブジェクトは512バイトずつ読まれてるのですが、ELFでは最初の512バイトにシンボルテーブルが書かれてたりするのでしょうか。いつか調べるー。いつー。

仕事すすみません。

す、すみません…。

select(2)ってデータがなくても返るのかな。man select_tutをよおおく読もう。

うりゃ。man -t select_tut | ps2pdf - - >| select_tut.pdf


2007年06月06日(Wed) おのぼりさん、ディズニーランドへ

掃除のおじさんがほうきで描いていた毎日大変です。今日の行き先は東京ディズニーランド。平日だというのにこんなに並ぶんだねえ。何度もパレードを見てわかったのは、同じパレードでも場所によって演目が少し違うということ。やっぱり中央付近で見るのがいいのかな。ビッグサンダーマウンテンを怖がるずんこ。すまん、まだちょっと早すぎた。僕も横に回転するジェットコースターには弱い(乗り物酔いをする)のだけれど。


2008年06月06日(Fri) 山頂は雪だったんだって

[memo] uuencodeとuudecodeはsharutilsパッケージに含まれる

古の電子メールの添付ファイルをひっぱりだす作業。

やれやれ。


2010年06月06日(Sun) 日本を堪能

としまえんにいったらコスプレの方がたくさん居た。何かイベントがあったのかいつものことなのか。


2015年06月06日(Sat) ハイキング改め山登り

頭痛で目が覚めた。抗ヒスタミン剤は効いているようだ。ネットワークが切れている。Bandで睡眠をはかっておけば良かった。

同僚ハイキング…たいしたことないよーって聞いてたら600m登ってみぞれが降ってきましたよ!MyTracksからStravaにデータを送るにはgpxファイルを経由する。

たこ焼きを習って、夕食はおっさんクッキング。みんなおいしいものをつくるなあ。


作り手とその取り巻きだけが楽しんでる間は本物じゃない。その中身が理解できない人々の生活を変えてこそ本物だ


zunda <zunda at freeshell.org>