USHさんのトモダチの日記、みんなの日記も見てね。 アナウンス:スラドとOSDNは受け入れ先を募集中です。
USHの日記: Ruby の楽しさ
なにげなく「Rubyの生産性の高さはどこまで本当か? 」なるサイトを見付けてしまった。
まあ、ここの機能を取り上げて言語の優劣を論じるのはなかなか難しい。
ただ、Ruby(とLISP)でできて、他の言語でなかなかできない事として、構造を持つデータの埋め込みがあるように思う。
例えば、S式で
(game
(stadium "Yokohama")
(teams
(team (name "FC Barcelona") (region "Europa"))
(team (name "SC Internacional") (region "South America")))
(score 0 1))
というようなデータを、プログラム中に埋め込みたいとする。
LISPなら上の式をそのまま quote すればよいわけだし、Rubyでも、
[:game,
[:stadium "Yokohama"],
[:teams,
[:team, [:name, "FC Barcelona"], [:region, "Europa"]],
[:team, [:name, "SC Internacional"], [:region, "South America"]]],
[:score, 0, 1]]
と書けてしまう。ポイントは、Array ([]) や Hash({}) がシンタックスに入っていて、いちいち new と書かなくてもよいところ。
さらに、上のデータの score が動的に代わるなら、[:score, 0, 1] の所を、[:score, $score1, $score2] とか変数化しておけば、そのときの値を埋め込んでくれる。(LISP でいう back-quote 機能の様な感じ) これ、以外と使えるので重宝しています。
大きなシステムならともかく、やっつけで作る細かいツールなんかは、ちょっとしたデータを埋め込んで置きたくなる。そのデータはできるだけ視覚的にわかりやすい方が、あとあとのメンテナンスが楽なんですよね。(メンテなんて言っている時点で、「やっつけ」と自己矛盾していますが。)
こういうのって、Java や C# ではできるんですかねぇ。
USHの日記: ThinkPad X32 + Vine Linux 3.2 + suspend to memory
いろいろ悩んでいた、ThinkPad X32 + Vine Linux 3.2 でsuspend を安定に動かす方法がわかったので、書いておきます。
基本設定は、APM を有効、ACPIを向こうにして kernel を起動。 apm -s でsuspend to memory になります。
問題なのは、AC online で起動したあと、battery で動作中に suspend すると、次、起動できなくなります。原因はどうも battery モードでの CPU のクロック低下のせいらしい。
なので、ちょっと強引だが以下のような解決策を。
/etc/sysconfig/apm-scripts/apmcontinue-pre を以下のように改変
case "$PROG" in
suspend|standby)
/sbin/rmmod usbmouse ohci1394 ieee1394 ehci-hcd usb-uhci hid
# force CPU freq high
echo -n "0%100%100%performance" > /proc/cpufreq
;;
resume)
# set suitable CPU freq
if apm | LC_ALL=C grep -q on-line &>/dev/null; then
echo -n "0%100%100%performance" > /proc/cpufreq
else
echo -n "0%0%100%powersave" > /proc/cpufreq
fi
# do nothing
;;
esac
resume の部分は apmscript の中での処理にまかせる方がいいのかも知れないが、apmscript 内のものではやたらと freq をとにかく最低にしてしまうので、それを避けるために、こちらに記述。