家で使っているマシンのPS2, PS2マウスとスピーカー込みで2100円とかそんなんだった安物キーボードのテンキーの反応がいまいちなので, これもPS2, 580円のところをポイント使って300円弱にさらに安物なキーボードを買ってきた
試しに取り替えてみたら, 安物過ぎる所為かただただ運が悪かったのか, 同時入力性能が悪すぎることが発覚, さすがに矢印キー2つ押しで斜めが入力できないというのはありえない
仕方が無いので旧キーボードを暫く使い続けることに
そうと決めたからにはキーボードの掃除に挑戦してみた
必要なのは少しぐらい手が滑ってもキートップが流れていかないように排水溝に網が張ってある流しとボウル
キートップを外してがしゃがしゃ洗って, 個別に汚れをスポンジで取り, がしゃがしゃ洗って陰干しにして, これをやってから乾かすべきだったと反省残った水気を拭いてからキートップを差し込む
乾かしている間にキーの下の層に堆積している毛だの埃だのを始末する
これだけ
結局入力性能には全く影響してないようだけど気分はよくなったのでよしとする
今週の生協のパン類おすすめ棚にはチョコ系のパンが並んでいた
その名も『ショコラ ブレッド』
何か多言語混ざってるよとかそういうのはおいといて, 『シャイン・ブレッド』とか『シャノン・ブレッド』とかが連想記憶から這い出してきた自分が駄目であることは否定の余地が無い
例によって例のごとくごく少数にしか分からないネタです, ごめんなさい
10:15 08/03/06 - d.y.d.
無粋な解説は無用かもしれませんが, 分からない人はascii(7)を…とか書こうと思ったけど書いてなかった, まぁ^はmod 32ということで
お誕生日おめでとうございます
郵便受けに入っていた廃品回収業者のチラシ
『役所で引き取らない消化器, タイヤ, 金庫等もOK』
後2者はいいとして, 最初のは家畜のものだったら生ごみとして持っていってくれるだろうけど, 人(以下略)
この日記のあるサーバに入って
$ file diary/*
とやってみた
殆どの日記が『UTF-8 Unicode text, with CRLF line terminators』と, 内部的には, (古いのはまとめたりしているけど, )基本的に1記事1ファイル, plain text実態に合ったファイルタイプを返してくれたのだが, 別物と判断されたものがちらほら, リンクはそのデータに対応する日記, 偶然にも全て1日に2つ書いた記事の2つ目が引っかかっている
因みに元のファイルに日付情報を付加しただけで, やはりplain text複数の日記をまとめたファイルは, 『Bennet Yee's "face" format』と判定された, これが何なのかは調べてもよく分からなかった, どうせ冒頭に登場するデリミタの"!!"が引っかかったのだろう
(追記)ついでに過去日記の記述を一部修正したらRSSの天辺に這い出てきてしまったので先頭だけでも復帰させるために空更新
生協の2食にて, 周りの空気に流されてメガプレートなるものを買う, 600円也
これはサラダ&ハンバーグ付きカツカレーが1つの皿に盛られたものであるが, 特記すべきはその量にあり, 楕円形の皿の長辺はBレーンの注文場所の目の前にある, 『MEGAプレート』と何故か中途半端に横文字店内POPによると30cmに達し, その総重量は聞くところによると880gだそうである
こっそりとズボンのベルトを補正したりきつい思いをしながら完食した結果, 現在何もいりませんな情況
生協で食べる昼飯としては少々高いが, Totalでは激安メニューといえる
けど, こんなのは暫く食べたくないなぁ
ガスの検針票が来る, 今月も6m3
そして, 今回指示数の欄が上に示した数字
引っ越した当初から9900台だったので住んでいるうちに0に戻るだろうなと思っていたのだが, ついにそのときが来たわけである
ということで, 早速ガスメーターを見てみる, 現在9999.136, 1ヶ月で6進むので日平均で0.2進むと考えると4日後に0になるようだ
まぁ9999.999とか0000.000の瞬間は見逃すと思うんだけどね
(追記) 証拠写真
いくしかないわね
さて, 問題はどうやってチケットをとるかだ
ローソンチケットのオンライン会員登録はしたものの, 無駄に費用がかかるので使わない予感, 他の予約サイトも費用面では似たようなもののようである, さすがに会場に買いに行くのも今回は出来なさそうなので, 早起きしてローソンに突撃か, 近所のローソンってどこだろ…って坂の上か, まぁないよりはマシであるが
アクセスログに『Excel vba 再現性』なんてのがあったので適当に書いてみることに, 以下思いつくままに書いているので正確性は保障できないですが, 何か思うところがあればどんどん指摘してくれると幸いです
プログラムで乱数の再現性を気にするという要請は2つに分けることが出来る, 再現して欲しくない場合と再現して欲しい場合である
後者は『乱数』という言葉に一見矛盾しているかもしれないが, 乱数関数が同じ数列を返してくれるとエラーの発生条件を固定できるので, 乱数が絡んでいるバグのデバグに役立つことがある
そもそも乱数といっても一般に使われるのは擬似乱数といわれる単なる漸化式で表された数列に過ぎない
数列が次にとる値の挙動が複雑怪奇で次の値を予測しづらい, 特に乱数の剰余を取ったりして使うと上位ビットの情報はユーザから隠蔽されるよく分からないからこそ乱数として利用できるという理屈である
余談ではあるが, 昔の某処理系の乱数は偶数の後には必ず奇数が, 奇数の後には必ず偶数が出現していたそうである, mod 2で使ってたら全然乱数になっていないので残念でしただったそうである
で, 乱数を再現したい場合の解は単純明快である, この数列のこれを乱数のseedという初期値を適当に固定してしまえばいいのである
C言語やPerlならsrand関数とか, ExcelのVBAを含むBasic系だとRandomizeステートメントとかに固定の値を与えれば, 常に同じ数列が得られるのである
逆に乱数を再現させたくない場合, これは多少面倒である
単一のマシンで実行することを前提にしていれば, 同一プログラムを同時に実行されることはないと仮定して, 時刻をseedとすればいい
C言語やPerlだったら1970/01/01 00:00 UTCからの経過秒数time関数, Basic系ならその日の00:00(多分現地時間)からの経過秒数Timer関数を上記seed初期化関数に食わせればよい
なお, 最近のPerlはsrandを呼ばなかった場合は適宜初期化してくれるし, Basic系なら引数なしでRandomizeを呼べば同等の処理をしてくれる
Windows Vistaは知らないxpのソリティアで新しいゲーム[F2]を押しっぱなしにしてみると, 1秒毎にカードの配置が換わり, 1秒経たないうちは同じ配置が現れる, この類の初期化をしていることが観察できる好例だと思われる
さて, これでは困る例なんかも考えられる
たとえばWebサーバ上にお御籤CGIを設置することを考える, このCGIでは1日1回おみくじの得点でランキングを作って公開しているとしよう
1日1回しか実行できないので日付の変わり目には駆け込み実行するひとや, 日付が変わった瞬間実行する人がいて, time関数が同じ値を返すという意味秒レベルで同じ時刻におみくじを引く人がそこそこの確率で発生すると考えられる
そこにたまたまいい得点を与えるような乱数が潜んでいた場合, ランキングに有効数字10桁ぐらいまで全く同じ得点の人が並ぶことになってしまい, 興醒めになってしまう
少々強引な例ではあるが, こういう場合に(ほぼ)同時実行さっる各プログラムで別の乱数を使いたいという要請が考えられる
問題は同じ値を乱数のseedとして使っていたことにあるのだから, それらの実行間でも違う値を使えばよい
幸いgetpid(2)システムコールやPerlの$$に入っている以下, PIDプロセスIDがそのような性質を持っているのでこの値に桁数を補うためにtime()を適当に左シフトした値でも加えてあげればかなりよいseedが得られるはずである
なお, 時刻とPIDの単純なxorを取るのは愚策である, 1秒後に1大きいプロセスIDで実行されたときに高い確率で同じ乱数が出てくるのは目に見えている
さて, これでも不十分な例をでっち上げることも不可能ではない, このサービスが思いのほか好評でリクエストを捌き切れず, 複数台の何も考えずにラウンドロビンするとリクエストごとの負荷の差に起因して特定のノードに負荷が集中する事態になりがちであるという指摘はとりあえず今は無視負荷分散環境でラウンドロビン実行しているとしてみよう
この場合, 各ノードのプロセスの累計数はだいたい同じ値をとり, PIDも似たような値を同時期にとると考えられる(実際にはそうでもないけどね)
この場合, 時刻とPIDに頼った乱数列初期化ではいまくいかないことを示唆している, ホスト名か自分 or 相手のIPアドレスのハッシュでもseedに加えるのだろうか, 面倒だなぁ…
いっそのこと/dev/大量のリクエストが来る前提なのでrandomでエントロピープールを使い果たした場合に待たされるのはパフォーマンス低下の原因となるけど, そもそも通信が大量にあるならエントロピープールは枯れないのかな? この辺不明urandomあたりを読んで初期化するのだろうか
なんでこんなことを考えてたかというと, MPIでsrand(getpid())したデバッグというか単にsleepの引数をずらしてタイミングのずれを恣意的に起こしたかっただけ, rank使えといわれたらそれまで乱数を使ったら同じ乱数列がノード間で発生してあ~あと思ったからなだけなんですけどね
研究室のネットワーク再構成作業の影響でアンテナがしばらく動作しません, 明日には直しますのでどうかご容赦ください
(追記 @ 24時間以上経過後)
なんとか復旧しました, ご迷惑をおかけしました
そして自分のアンテナ依存症を実感したり
この間ネタにしたガスメーターがついに1周しました
…って, わたしが回した分は1%にも満ちませんが
ということで証拠写真
風呂のお湯を入れながらこの瞬間に立ち会ったのですが, ボイラーフル稼働時のガスの消費はすさまじく, 携帯が9999.999の画像を保存している間にも無常にもメーターは回り, 0000.000の画像は取れずじまいでした, 残念
某ライブのチケットは無事確保完了, 整理番号は1桁なのです
nikori氏との比較の結果, ローソンに出向いて予約するよりもチケットぴあのサイトでオンラインで取ったほうが手早く予約できる模様, ローチケ.com onlyならまたIDが向こうが提供する数字なのですばやくログインできる自信が無い結果が変わったかも知れんけど…
なんとなくガスコンロ周りを大掃除してみることにした
引っ越してから1年ちょい, コンロ自体は1度拭いたことはあったけど, 土台も含めて綺麗にするのはたぶん初
こういうときにどういう洗剤を使えばいいのか分からなかったので, 食器用洗剤とトイレ用洗剤と風呂用洗剤の中から風呂用をチョイスすることに, 単に霧吹き式なので使いやすかったというだけの理由だけど
で, 適当に洗剤つけて適当にそこそこボロくなっていたのでこの作業を以って退役して頂いたスポンジでこすって, キッチンペーパーで拭いて, 拭いて, 拭いて…
片づけが苦手な狐にとってはこのぐらいが1度に掃除できるMaxかもしれないと思った, 例外は物を探している途中
だめだこりゃ
昨日, マシンの奥底にあった昔の汚点とも栄光ともいえる何かを発掘し, 冗談を解するであろう人たちにこっそり見せてみた
言い訳として比較対象を持ってこようと思ったが, Web上からは痕跡はあるものの肝心の本物がなくなっていた, 時の流れは残酷
で, ある人からはこういう方向でふざけたものは作ったこと無いなぁといわれ, ある人はそのための仕事量を省力化するべき方法を真面目に(?)考察された
当時に比べて今は駄目人間化が激しいと思うことは多いが, 逆に当時のほうがアレだったなぁと思える数少ない一面
数ヶ月前に書いた某スクリプトの名前でぐぐってみたら, ロシア語のページが引っかかった, 使ってくれた人が居るらしい
あの拙い英語のヘルプメッセージを頼りに使ってくれたのだろう, 感謝
自分が目的に合うソフトを見つけたときに, ロシア語で書かれていても多分理解できず, 車輪の再発明をする羽目になるであろうことを考えると, やっぱりちゃんとしたドキュメントを英語で作る必要があるのだろうかなぁと思った
ロシア語でドキュメント? 無理なので勘弁してください