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と組み合わせて逆引きマニュアルのようなのも作れそうな気もしてくるのですが、きっとどこかにあるんだろうな。
2003年06月06日(Fri) じじい化zunda
● 晩ご飯をたべてすぐ寝る、朝早く起きてシゴトをする。もしかしたら調子よくなってきてるかも。
● [iiimf] iiimf-11.1.1280ではATOXが使えない
がーん。やっぱATOX持ってる人にメンテナンスしてもらわないとだめだねぇ。どうしよう。
r11_2は未だにmake installできてなかったりするのだ…。
● カバンの中身が外から分かる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パッケージの依存関係からインストール順を決めるとか、かな?
2004年06月06日(Sun) 広いところで初フライト
● 気持ちよかった
● [memo] viで現在行を画面の中央に移動するのは「z.」
ぽちネット-Linux備忘録-Hints&Tips-viエディターの使い方より。「M」じゃファイルの内容が付いてきてくれないしなーと悩んでました。zで始まるコマンドは沢山あるみたい。:help zで見られる。ちょっとずつ覚えていこうかな。
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バイトにシンボルテーブルが書かれてたりするのでしょうか。いつか調べるー。いつー。
● うりゃ。man -t select_tut | ps2pdf - - >| select_tut.pdf
2007年06月06日(Wed) おのぼりさん、ディズニーランドへ
● 毎日大変です。今日の行き先は東京ディズニーランド。平日だというのにこんなに並ぶんだねえ。何度もパレードを見てわかったのは、同じパレードでも場所によって演目が少し違うということ。やっぱり中央付近で見るのがいいのかな。ビッグサンダーマウンテンを怖がるずんこ。すまん、まだちょっと早すぎた。僕も横に回転するジェットコースターには弱い(乗り物酔いをする)のだけれど。
2015年06月06日(Sat) ハイキング改め山登り
● 頭痛で目が覚めた。抗ヒスタミン剤は効いているようだ。ネットワークが切れている。Bandで睡眠をはかっておけば良かった。
● 同僚ハイキング…たいしたことないよーって聞いてたら600m登ってみぞれが降ってきましたよ!MyTracksからStravaにデータを送るにはgpxファイルを経由する。
● たこ焼きを習って、夕食はおっさんクッキング。みんなおいしいものをつくるなあ。
> anego [背広ってのぼせちゃうものなんですか? といふ素朴なギモソ。 いあ、決して前の自転車のおねいさんの太モモが、とかとかと..]
> UmaShika [うーむ、よほどピッチリした背広でも着ていたのだろうか?]
> ずんだあん [上着もしてネクタイもしてた上に他の人はTシャツで歩いてるくらいの陽気だったのです、トイウコトニシテオイテクダサイマシ..]