Rubyでdebug用のloggerをお手軽低コストに仕込む

まとめ

  • production での実行記録をちゃんと残すという意味ではなく
  • (なんか変かも?)と思って調べる時やテスト実行時に役に立つ debug 用の logger の設定方法をまとめる
  • logger の block 記法と caller が便利

Loggerのblock記法はRails GuideでImpact of Logs on Performanceとして紹介されている

Debugging Rails Applications — Ruby on Rails Guides

曰く

logger.debug("")

で文字列を与えると log_level で出力を制御していても String オブジェクトを生成するコストは必ず発生してしまう。そうではなくて以下のように

logger.debug { "" }

で block を与えると debug レベルが出力対象となっている場合だけ block の中が評価される。

なるほど、これはよい。恥ずかしながらあまり log を重視していなかったので知らなかったのだけれど、実は Ruby 標準の Logger もそういう動作をする。

library logger (Ruby 2.6.0)

へーへーへー。

単にある処理を通過したことをdebug用に記録する

logger.debug {
  ["passed", caller(3, 1), "of instance #<#{self.to_s}>"].join(" ")
}

みたいなものでどこの処理を通ったかを logger に出力することができる。

instance の部分については class メソッドの場合は class に変えればよい。その場合はシンプルに

class #{self.to_s}

でよい。

caller(3, 1) が何をしているかというと、caller には以下のように呼んだ人が収まっているので、

  • `block`
  • `add` ( in `debug` )
  • `debug`
  • #{method}

この 0 から数えて3番に当たる caller が書かれたメソッド名と caller が書かれた行番号を返してくれる。

もちろんこれは構造が複雑になれば変わってしまうので、その場合は caller(0, 1) でもよい。それでもファイルの中に該当する行番号と `block in #{method}` の出力を得ることはできる。

これで何か特別な情報を付与しなくても、必要な時以外には負荷が上がらないようにしつつ処理の通過状況を logger に出力できるようになる。

cf. module function Kernel.#caller (Ruby 2.6.0)

条件演算子のべからず2題

よく自分は

( condition )
  ? then
  : else

みたいに条件演算子を使って書いてしまうんだけど、日常的に使う言語の中で Ruby も JavaScript もこの書き方はできない。

正確には

  • Ruby では ? を次の行に下ろすと syntax error なので絶対に書けない
  • JavaScript では ; の自動補完が悪さする可能性があり、JSLint, JSHint などで警告される

というもので、JavaScript では書ける。動作は保証されないけど。

ふむ。

spamlinkcheck.rb を導入

ここ数日あまりに TrackBack spam がひどく、いちいち対処するのが面倒なので spamlinkcheck.rb を入れてみた。やっぱキーワードだの URI だの手で設定していく方法じゃ無理だよな。

さてどうなるだろう。

ecb 続き

とりあえず便利なのかどうかもよく分からないままだとなんかシャクなので、carbon emacs を build し始めた。

carbon emacs で試すとちゃんと PHP の class も解釈できるな。なんだろう? 何が違うのかな?

んー。わっかんねーなぁ。正しくパースできてるやつとできてないやつがある。同じ emacs 22.1 の nox と carbon の両方で試しているんだけど、同じファイルなら同じ挙動をするのかというとそうでもない。なんかどうもファイルを開いた順番とかも影響してそう。

なんだー? これ。

Rails のプロジェクトの方はきれいだな。php-mode の問題かもしんないなぁ。

[追記] んー。基本的に ecb が利用している CEDET の中の Semantic で解釈を行うのかな? だとすると対応言語には

Emacs Lisp, Java, C/C++, C#, Python, Erlang, awk, Makefile, and Scheme.

って書かれてるんだよな。ここに書かれていない言語はどうやって解釈してるんだろ? わっからないなー。Lisp ほとんど読めないし。

あ。PDF のマニュアルを読んだら

a list of functions/classes/methods/… in the current file, (ECB uses the Semantic Bovinator, or Imenu, or etags, for getting this list so all languages supported by any of these tools are automatically supported by ECB too)

てな記述が。そうか TAGS を用意してやればいいのか1。リアルタイムには反映されなくなるけど、そこはそれ、code browser だし。

んー。明示的に用意したけど、変わらないような…。PHP 対応はなっちゃいねぇってことでファイナルアンサー?

  1. TAGS を用意していない環境で Semantic の対応していない PHP や Ruby をどうやって解釈していたのかはこの際置いておく。 

相手のポジションを勝手に明言しちゃう戦略

あれだな。最近、反小泉は反進歩的で既得権益にしがみつくやつ、みたいな印象がちょっと強すぎるな。

いま、郵政民営化に反対しているやつを落選させようとか言ってるのってそういう印象に騙されちゃってる部分があるよな。改革改革と言い続け、実際に仕組みをあれこれいじり続けてきた成果とも言えるけど、実際に仕組みをいじった結果よくなったかどうかの検証はまだ全然済んでないってことは忘れちゃいけないよな。

これが相手の負けを勝手に宣言しちゃうなんて所業だと簡単に見抜けるし、よく見るウヨサヨらべりんぐでもネットジャンキーは簡単に見抜けるんだろうけど、地道に何年も抵抗勢力と戦ってる姿勢を見せ続けた成果は確実に出てるってことだよな。でも本当の成果はそういうところで見せるもんじゃないよな。頑張ってるのは認めなくはないけど、自分に反対する人間がみんな改革そのものに反対しているかのように見せるのはうまいけどずるよね。批判と否定は違う。郵政民営化そのものには反対じゃないが小泉の今のやり方は認められないっていうのは、かっこ悪いけど実に真摯な意見だと思う。今回の選挙では、そうした真摯だけど一般に響きにくい意見がどれだけ拾われるのかに興味あるな。

あと、小泉政権は景気のどん底から始まったっつーのも追い風だよね。(何かが回復してるような気がしちゃうから。でもその回復基調が小泉政権の成果かどうかはちゃんと見極める必要があるよな。)この閉塞感を脱却するためには何かが変わらなければ、そのためにはこの追い風に乗ってる人間か政権に期待しちゃうぜ、っていう思いが強くなるのは分かるが、変わるために必要なのは度胸のほかに歴史の勉強だと思うぜ。おれも歴史はきらいだけどさ、たかが数十年くらいなら追いかけるよ。少なくともいま現役の人間がいちばん元気だった時代くらいまではさかのぼるよ。

これは。

政治だけの問題じゃないよね。そうしないと見えないことって、たくさんあるんだよね。なぜその人がそういう立場なのか。実際のところそれが分からないと同調も反対もないし、まして説得なんてできない。説得が自分のポジションの自分の仕事として有効なものかどうかという判断は当然前提として必要だけど、それが必要ならそれはするさ。

例え必要がなくても、「違い」をクリアにするために必要なことなら、やっぱり「マイ抵抗勢力」の背景は知っとかないとね。なんだっけ、敵を知り、己を知らば、百戦危うからずってね。百回も戦う気ないけどさ。

以上、チリワインで酔っぱらったぜ万歳!な木曜の夜だ!

FTTH 時代

さらばNTT–FTTHと電話サービスを5200円で提供するケイ・オプティコム (CNET Japan)

都会は選択肢があっていいなぁ。NTT との契約が不要で電話が使えて、インターネットもそのまま利用できる。FAX とか電話回線が欲しい場合はどうなるのか分からないけど、少なくとも電話 + インターネットで基本料金がこれだけ安くなるのは魅力だなぁ。うちなんか @nifty + NTT で 6000円以上軽くするし。まーその代わり携帯代は比較的安い方なので通信費全体では案外高くないんだけど。

参考 ケイ・オプティコム : 事業内容

Firefox のアップデート

今まで

  1. インストーラから古いバージョンを削除
  2. インストーラで新しいバージョンをインストール

していたんだけど、このときインストール先のディレクトリを完全に削除してしまうとプラグインも全部削除されるので激しく面倒くさいことになってしまう。

プラグインをキープしたままインストーラでどんどん上書きしていくのって、ちょっと抵抗あるんだけど、そういう人間はやっぱインストーラ使わない方がいいのかな?

最初のインポートのときはなかなか便利だと思ったけど、これが済んじゃえばインストーラはかえって面倒なのかもしんない。

zip アーカイブ+jlp xpi

にして手でバイナリ上書きしてった方がいいのか? あーでもインストーラで入れたやつじゃないとプラグインをインストールするときにプラグインを要求するブラウザとして認識されなかったような???

  1. 初回はインストーラ
  2. アップデートは zip アーカイブ + jlp xpi

の方がいいのか? うーん? なんかすごい基本的なことのような気がする。

信じられん < eAccess

!! お知らせ !!

このメールは info@eaccess.net 宛にお送り頂いたメールへの
システムからの自動返信です。


イー・アクセス インフォメーションセンターでございます。

この度はinfo@eaccess.netにご連絡頂きましてありがとうございます。
誠に申し訳ございませんが、現在こちらのアドレスでのお問合せ受付
は行なっておりません。(このメールは自動返信です)

お手数ではございますが、お問合せの際は下記URLの入力フォーム
よりお願いいたします。

https://service.eaccess.net/inquiry/adsl/


なお、お客様がinfo@eaccess.net宛にメールを送信されていないにも
関わらずこのメールが届いた場合は、お手数ではございますが本メール
を削除していただきますようお願いいたします。

最近は差出人アドレスを偽って送信されるウィルスメール等が存在
しているため、お客様のメールアドレスを差出人アドレスとして詐称
したウィルスメールがinfo@eaccess.net宛に送信され、その結果この
自動返信メールがお客様に届いた可能性がございます。

何とぞ上記事情をご理解の上、ご容赦のほどお願い申し上げます。


今後ともイー・アクセスをよろしくお願いいたします。

=============================
 イー・アクセス株式会社
 インフォメーションセンター
 http://www.eaccess.net/
=============================

詐称の事実が分かっててなおこんな自動返信のシステムを動かして無駄なトラフィック増やしてるのか。もうちょっと考えてよ。だいたい、使ってないなら返信する必要ないじゃん。

1日のネット利用時間が14時間!?

http://www.asahi.com/national/update/0825/019.html

いや、実際私はそれ以上だとは思いますが(というか厳密には測定できないですけどね。繋げてるだけで何もしてなかったりするし。)、これが家庭での利用時間となっているのがちょっと変だなぁ、と。平均でしょ? 平均でそこまで伸びるほど日がな一日ずっと家に居る人がそんなに多いんですか? まぁテレビと違って読んだり書いたりがあるし、自分の好きなタイミングで休めるから、テレビを見るよりはずっと楽に長時間利用できると思いますが。それにしたって、ねぇ。

へぇ

http://www.dfnt.net/t/photo/column/he.shtml

要 Apple Pro Mouse(超重要!) + Flash Player ってことで。

About

例によって個人のなんちゃらです