最近の更新 (Recent Changes)

2018-12-12
2014-06-06
2014-05-28
2014-04-30
2008-08-27
2008-03-15

最新リリース情報

リリースはありません

Wikiガイド(Guide)

サイドバー (Side Bar)

   haiker.logo to beos continue  

省略記法
Pathname.glob('/var/foo/*').map(&:basename)
この&:は何なんだろう。しかも{}ぢゃなくて()だ。mapでの省略記法だそうな
オブジェクト.map(&:メソッド名)
全ての要素に対して&の後にシンボルで指定したメソッドが繰り返し実行

ディスクが五月蝿い パート3
今度はtracker-store orz。
/etc/xdg/autostart/tracker-store.desktopにHidden=trueを追加する。
autostartならそこから削除したらダメなのだろうか

ディスクが五月蝿い パート2
CPUが100%になっている。何が走っているのかtopしてみたところupdate-apt-xapiというものが見つかった。
ぐぐってみると削除してもいいような(削除してもいいのならなぜcronしているのかしっくりしないのだが)。
sudo apt-get autoremove --purge apt-xapian-index
sudo apt-get autoremove --purge にて削除した。by いつか、そのとき、あの場所で。blog-entry-932.html

ディスクが五月蝿い
起動後しばらくしてディスクがバリバリと五月蝿い。
いつ頃からだったかupdatedb.mlocateなるものが走り出すようになった。
rm /etc/cron.daily/mlocateにて削除するといいらしい。by Index of /.Phantom blog-entry-1088

Google 変訳
app_server
UoA

> /dev/null 2>&1
shで標準出力と標準エラーの出力を捨てる時によく使われる記述だが 2>&1 > /dev/nullは間違いだという記述があするったりするが標準出力を捨てて、標準エラーを標準出力として出力するという目的であればそれは正しい。そもそもリダイレクトを行き先の変更のように解釈してしまい順番を意識しないが実際はファイル識別子の複製であり、そのため順番が意味をもつ。
bashでは &> /dev/nullや >& /dev/nullで済んでしまう。 また|&は標準出力と標準エラーをパイプしてくれる。

赤ドット格子
haiker.logo

vlcで再生しようとすると赤いドット格子模様が表示されるようになった。ファイルが壊れているのだろうと思ったのだがどうも変だ。他の環境では再生可能なのだ。
少し前にアップグレードしたことや、ディスクフルになったことがあったので何かそのあたりの問題かなとも考えたがしっくりこない。ふとカードに問題があるのかとXorg.0.logを見てみると
Current dotclock (204Mhz) too high for video overlay on CRT1
がひっかかった。もしやとディスプレイ解像度の周波数の部分を幾つか試したら表示されるようになった。

記述
string[0] == ?u
%記法
配列の結合 to_sでもOK。だから文字列の中なら"#{array}"でも結合される

二次元配列
Array.new(n, Array.new(n, '初期値')) としそうだがこれだとArray.new(n, '初期値')したものを各要素に代入したものになってしまう。 Array.new(n) { Array.new(n, '初期値') } とでもする必要がある。分からぬではないがしっくりこない。

ローカル変数
XMLをパースして値を取り出そうとする時にいちいちレシーバー(オブジェクト)を記述するのが面倒だ。オブジェクトは名前と値を知っているのだからそれをリストアップしてローカル変数として定義したらいいと思った。がこれがどうして難しい。実行時にローカル変数を定義する方法はeval()しか思いあたらない。ローカル変数の定義にeval()は大げさ過ぎるとは思うが。 Pascalのwith句のようなイメージを考えたのだがローカル変数のスコープなどから私の手には負えないので単純にローカル変数定義の文字列を受け取ってeval()する事にした。

hoge = Proc.new {
  eval "foo = 3"
  p local_variables
  p defined? foo
  p foo
}
hoge.call

["hoge", "foo"]
nil
5: undefined local variable or method `foo' for main:Object (NameError)
ここで奇妙な事が起る。eval()でローカル変数を定義してlocal_variablesで確認すると確かに配列にはfooがあるのにdefined?ではnilになりpではNameErrorとなってしまう。これでハマってしまった。ネットで検索してみたがこれはというものが見つからない。しかし灯台下暗し。答えはすぐそばにあった。Rubyプログラミング入門のP174に『ローカル変数のスコープはコンパイル時に決まる静的なもの』という記述があった。ローカル変数がダメならメソッドはどうだとメソッドにしてみたがこちらはOKだった。
hoge = Proc.new {
  eval "def foo; 3 end"
  p defined? foo
  p foo
}
hoge.call

p defined? foo
p foo

"method"
3
"method"
3
ただブロックの外にまで有効になってしまうのがどうも気持ちが悪い。

ruby -r profile ファイル名 2> 結果
 何の変更もなくプロファイルできることは便利なのだが四則演算のような単純な処理を繰り返すものでは誤差が蓄積するようでプロファイル自体も遅いし、四則演算自体も時間がかかっているように報告される。しかしtimeで計測すればそんなことはない。

Rack-0.9.1
 ShowExceptionsを使おうとしたらエラーになる。request.rbの@env["rack.input"].rewindがまずいようだ。 Rack::Handler.CGIを使用した場合、@env["rack.input"]はSTDINとなっている。(他のHandlerはSTDINを使っていない) 確かにSTDINはrespond_to?(:rewind)にはtrueを返すくせにSTDIN.rewindをすると例外を吐く。 注釈にしても問題は無いと思うがとりあえず 0 < @env["rack.input"].linenoを追加してrewindが必要な場合だけ、実行するようにしてみる。

不可解 orz
 cgiでのエラーは厄介だ。その場で確認できないのでいちいちエラーログをtailする羽目になる。そんな時

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>500 Internal Server Error</title>
</head><body>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error or
misconfiguration and was unable to complete
your request.</p>
<p>Please contact the server administrator,
 webmaster@localhost and inform them of the time the error occurred,
and anything you might have done that may have
caused the error.</p>
<p>More information about this error may be available
in the server error log.</p>
<hr>
<address>Apache/2.2.3 (Debian) PHP/5.2.0-8+etch13 Server at localdomain Port 80</address>
</body></html>
と表示された。明らかにhtmlがplainで表示されている感じだ。
curlでアクセスしてみると
HTTP/1.1 500 Internal Server Error
Date: Fri, 13 Feb 2009 02:36:51 GMT
Server: Apache/2.2.3 (Debian) PHP/5.2.0-8+etch13
Content-Length: 0
Connection: close
Content-Type: text/plain; charset=UTF-8
となる。Content-Typeがtext/plainとなっているせいだろうとHeaderを追加してみたら案の定、htmlで表示された。
ではなぜtext/plainとなっているのだろうとapach2.confを見てみるとDefaultTypeの記述がある(理由は別のはずだ)。
更に不可解なのはContent-Lengthが0なのになぜ表示できているかだ。404でも似たようなhtmlが出力されるがこの場合はきちんとContent-Lengthは設定されているし、Content-Typeもtext/htmlなのだが。

Content-Lengthが0なのになぜ表示できているのか
それはContent-Lengthが0なのにContentが出力されていたからだ。wgetやcurlではContent-Lengthが0だとContentがあっても出力されないようだ。
そこでtelnetで確認する。しかし使い方がいまいちよく解からない。
GET パス
だとヘッダーが出力されない。
GET パス HTTP/1.1
だとBad Requestだと叱られる。Host:を追加してようやく確認できた。

500のInternel Server Errorにしろ404のNot Foundにしろapacheから出力されていると見ていいだろう。ではなぜ500ではtext/plainで404ならtext/htmlで出力されるのだろう。何か設定でもあるというのだろうか。そもそもapacheから出力しているのなら正しくContent-Typeを設定すればいいだけのように思うのだが。

 Internal Server ErrorはCGIが適切なHTTPヘッダを出力していないということらしい。確かにエラーが発生した場合はHTTPヘッダを出力しない。エラーメッセージは標準エラーに出力されていた。

mod_rewrite mod_rewrite Tips
rtmpdump rtmpdump
msdl msdl
portport