どこかのバカが俺のアドレスを騙ってウィルスメールを出しやがったらしく、 それのエラーメールとウィルスアラートが大量に来ていた。 勘弁してくれ……。
つーか、ウィルスを送った相手に通知メールを送る Norton って何様のつもりなんだよ。自分が SPAM まいてるじゃねえか。
(追記) あ、そうか、これが噂の SOBIG.F なのね。 SOBIG.F をくらった人のウィルスアラートに被害を受けたわけだな。
……なんかアホくさ。
おっと明日だったか。またうっかり見逃すところであった。 久しぶりに出席しよう。
とりあえず生データ
メインマシン (Pentium 4 2.4BGHz, DDR SDRAM 1GB, ATA 20GB + 80GB) 計測時間 10.2h 料金 19円 消費電力 0.78kWh サブマシン (Pentium 3 866MHz, SDRAM 512MB, ATA 40GB) 計測時間 10.0h 料金 14円 消費電力 0.57kWh Libretto L1 (Crusoe 566MHz, SDRAM 128MB, ATA 20GB) 計測時間 3.0h 料金 1円 消費電力 0.07kWh Sun Ultra30 (UltraSPARC-II 250MHz, EDO DRAM 256MB, SCSI-3 2GB + 4GB) 計測時間 6.10h 料金 14円 消費電力 0.60kWh digital AlphaServer 800 (Alpha 21164 333MHz, EDO DRAM 384MB, SCSI-3 4GB + 4GB, RAID1) 計測時間 5.0h 料金 16円 消費電力 0.67kWh digital PersonalWorkstation 600au (Alpha 21164 600MHz, SDRAM 320MB, SCSI-3 4GB + 4GB) 計測時間 4.34h 料金 16円 消費電力 0.65kWh EIZO E55D (ダイヤモンドトロン 17" CRT) 計測時間 8.01h 料金 18円 消費電力 0.72kWh
単位を統一した後。
CPU W 24h稼働時の月間電気料金 (1kWh = 25円 で換算) Alpha 600MHz 144W 2600円 Alpha 333MHz 134W 2412円 SPARC 250MHz 100W 1770円 CRT 90W 1620円 P4 2.4GHz 78W 1404円 P3 866MHz 57W 1026円 Crusoe 566MHz 23W 420円
えっと……。
結論は Alpha の圧勝ってことで、オケー?
Ruby の文字列が mutable であるのはやっぱそれなりに必然性があると思うんだな。 Ruby の文字列は Java で言う String と StringBuilder を兼ねてるから。 Java でも StringBuilder を String として扱いたいというときがあって、 それだからこそ CharSequence interface なんてのがあるわけでしょ。 でも Ruby ではこういうパターンには最初から String 一本で対処することができる。
もちろん Ruby には静的型システムの制約がないわけだから、 逆に String と StringBuilder が分かれててもいいんだと言うこともできる。 少なくとも Ruby レベルではメソッドシグネチャさえ揃えておけば 統一的に扱えてしまう。
しかし拡張ライブラリを考えるとどうか。 String と StringBuilder を統一的に扱えるのか。 ちょっと怪しいような気がしない?
ん? 大丈夫かもしれないな。 構造体を同じ配置にしておけばよい? いやそれとも構造体は struct RString を利用して、フラグだけで対処すればいい? さらに考えると struct RBasic の klass だけ変えてもいいのかな?
うーむ……。なんか immutable でもいけそうな気がしてきた。
いやでもやっぱそれなりに便利なときもあるかなあ。 だいいち Stack や Queue すら分かれてないのに (thread.rb にあるとか野暮なことは言わないこと) String と StringBuilder が分かれてるのはウザったい気もするね。 だいたい、よほどの素人じゃないと「うっかり」文字列を 変更してしまうことはないような気がする。
そういや Rite では String が immutable になるとかいう話はあったっけ。 なんかそんな記憶があるな。
標準ライブラリの使い勝手がいま一つって気がする。 空リストを渡すとあっさり例外になったりとか。
しかも例外がどこで起こってるのか全然わからないのがすげえ嫌。 このへんは小刻みテスト・小刻みコンパイルで乗り切るしかなさそうだ。
Ruby で言うところの String#downcase がない。 String#sub がない。gsub がない。strcasecmp がない。 (もっとも真偽値を返す strcasecmp は Ruby にもないね)
# ちなみに downcase は比較的簡単に書ける downcase = map (toLower)
関数によって名前を省略したりしなかったりするのが中途半端。 CamelCase が基本かと思うと突然 C 風になるのも中途半端。
正規表現にマッチしたかどうかだけ真偽値で知りたいのに Maybe [String] ってのを返してきてウザい。
と思ったけど、これは Data.Maybe.isJust を使えばよいということがわかった。
% href isjust Data.Maybe,isJust isJust :: Maybe a -> Bool isJust x x が Just _ ならば True、そうでなければ False -- 文字列のリストのうち正規表現 re にマッチするものだけ残す filter (\str -> isJust $ matchRegex re str) strlist
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.
「検出したんならそのウィルス部分は削れよ」とは思う。