だだもれ

2013年06月30日

SPAMは糖質制限的に優秀。 ただ、蛋白質は少ない。 100gあたり12gというのはかなり薄まっている。 脂肪も29gと、それほど多いわけでもない。 成分表によればバラ肉で蛋白質14、脂肪34なので、 要するに水で薄まっていると思われる。 炭水化物2gがミソで、この澱粉が保水しているのだろう。 だからこそのゼリーぽい食感なわけだ。 このへんはハムやベーコンも同様である。 ただ、SPAMは何せ安い。200gで300円を切る。 味の単純さもいい。そのへんの燻製風加工肉 の味の押しつけがましさが辛い私としては、 SPAMの方がずっとマシである。 塩分濃度も100gあたり1.7gと、 それほどではない。缶を全部食べても3.4gだ。

7を法にして(つまり7で割った余りだけを考えて)1からどんどん3を掛けていくと、 326451で循環する。ちゃんと6個の数字が全部出る。 でも、2を乗じていくと、241で循環する。3つしか出ない。 数がいくつ出てくるかどうか、つまり周期がいくつになるかは どうすればわかるか。何か法則性はあるのか。 そういうことを知りたいわけだ。では読もう。

a^(p-1)=1(mod p)。pが素数であれば、何かを法-1乗すれば1になる。 まずこれが前提となる。フェルマーの小定理。 次に、周期あるいは位数は、p-1の約数になる。p=7だと、2,3,6になる。 どれになるかが前もってわかる方法はないのか? とりわけ、6になる数の条件は何だ?

オイラーの函数は乗法的。 euler(ab)=euler(a)*euler(b)。ただしaとbが互いに素な場合。 ということは、何か合成数kがある時にeuler(k)が知りたいとすれば、 kを素因数分解するのが早い。素数であれば、euler(x)はx-1を返す。 したがってそれぞれ1づつ引いて掛けるだけで済む。 これがMWCにおいて重要なのは、 法が(ab+1)の形になっていれば、位数はaとbが素数であれば容易に計算できるからだ。 法が(ab-1)の形であれば、(ab-2)を素因数分解せねば位数がわからない。 すなわち周期がわからない。これはab-1を素数になるように選んだとしても、 桁が大きいと多大な時間を要する。

a^(p-1)=1(mod p)において、1を移項すると因数分解できる。 pは素数だから奇数で、p-1は偶数だ。必ず2で割れる。 (a^((p-1)/2)+1)(a^((p-1)/2)-1)=0(mod p)。 つまり、a^((p-1)/2)=1かa^((p-1)/2)=-1のどちらかは必ず成り立つ。 で、前者が成り立つ場合、見ればわかるように周期が半分になる。 問題は前者が成り立つようなaを前もって見つけて避けられるかどうかだ。 これは、a=x^2(mod p)となるようなxが存在してしまうとマズい。 xに0からp-1以下を順に入れて確かめればわかる。 p=7の場合aが1,2,4の時にそういう数xが存在し、実際周期が短い。 aが1だとまず論外で、a=2だと周期が3、a=4でも周期が3。 a=3は6、a=5でも6。a=6は周期が2しかないが、a=p-1は周期が2になる 気がするなあ。もしそうなら前もって除ける。

(p-1)^2=p^2-2p+1=1だから、絶対2乗したら1だ。つまり周期は間違いなく2。

素数夜曲の平方剰余の説明がどうにもわからん。全体に説明が粗いが、 ここは 特に粗い。「こうやったらこうなります。名前があります」 の連続ではどうにも困る。でも別に特定の用途が決まってるわけでもないから こうなるのも無理はないのか?

単にax(mod p)でやる線形合同法を考える時に、周期最大になるには aがpに対して原始根であればいい。pが素数であれば、原始根は必ずある。 ただし、pを素数とする時、axが32bitに入り切るとすれば、pもaもxも16bitまでだ。 16bit以内で最大の素数を法として線形合同法を二つやり、 これをビット混合して32bitを作るようなことをすれば、 周期はだいたい32bitになる。うまいことビットを抜かれると16bit周期に落ちるが。 でも除算があるから嫌われる。

法を2^32にした時、こいつは素数ではないわけだが、最大位数は一体いくつだ? オイラー函数の掛け算への分解は互いに素でないとダメなので使えない。 wikipedia見るとなんか知らん式があるな。どうも2^31になるっぽく、 2羃に対しては半分になるっぽいのだが、本当か?なぜだ? まあ仮にそれを認めたとして、2^32を法に選んだ時にaをなんぼにしたら 位数最大になるんだろう。諸々の定理は法が素数のケースについてだから そのままでは使えない。平方剰余で候補を絞ることすらこのままではできん。 なにか素敵な手を使って素数のケースと等価であることを示すとか、 素数でやった結果にわずかな修正を加えて使うとかする方法がないと どうにもならないぞ。

knuth読んだらそれだけでも絶望的に数学だった。 仮に私が理解したとしても、他人に伝えられる内容じゃない。 そして私の心がその前に折れる公算大。 これは、もっとバカな方法で対処すべきだ。 結果の評価は誰でもできる。 あるパラメータを選んだ時に周期がいくつになり、統計的にどういうふるまいをするかは 評価可能だ。適当なプログラムを書いて一晩待てばいい。 話はそこからだ。そこから始めないと理解もクソもない。

MWCの方が数学的にはマシなのかもしれん。 素数を分母に持つ有理数の小数展開だ。 法が素数なので線形合同法のように合成数と戦わずに済む。 そっちからだなあ。

せっかくだから馬鹿正直な考えで線形合同法を考える。 y=ax型の線形合同法で法を2^32に固定すれば、aの候補は高々2^32個しかなく、 どう考えても偶数はダメなので半分になる。 とりあえず、a=1はダメ。a=3だとどうなるんだろう。 3を何乗したら1になるだろうか。本を2冊とwebをいくらか見て、 位数を手っ取り早く知る方法が見つからないということは、 ないのかもしれない。一体この手のパラメータってどうやって探してるんだ? まさか実は「たまたま試した奴で具合が良かった奴が広まってる」 の域を出てないとか言わないだろうな。 knuth見ても、このケースは法が2の羃であることを利用した証明を使っている。 ということは、法がどんな合成数でもあっさり周期最大になるaを 求める方法はこの時点ではなかったということだ。 あればそれでやっていただろう。

knuthによれば、8で割って1か7余る数はダメらしい。なぜだ。 (8n+1)^k=1(mod 2^32)を展開してけば上の方はあっというまに2^32の倍数になるから わかる。下の方は定数項がいつまでも1でこれがヤバい。 一次は8nkで、k=2^29で2^32の倍数になって消える。 でも+3とか+5なら大丈夫という論拠はわからん。 法を16か32くらいにして紙の上で試せば納得できるのかもしれんなあ。

結局のところ数学がわからんのは、具体的に数をつっこんで計算する経験の数が 足りてないからであることが多い。 才能があればあるほど少ない量の計算で上位世界に飛び立てるようになるんだろうが、 ゼロじゃないだろう。ガロアみたいな規格外な天才はどうかわからんが。 だから金重明の本みたいなのはいいと思うわけだ。 ただ、これはこれで何かに使うためのものじゃないのが辛い。 「ほら面白いでしょ?」とか言われてもなあ。こっちは必要に迫られているわけで。

Knuthは2進以外のコンピュータに関する記述を排除した軽量バージョンが欲しい。 あと、この独自仮想マシンのアセンブラの説明も辛い。

まあ加算なしの線形合同法は論外か。 y=axだと、aが偶数なら偶数しか出てこないし、奇数なら奇数しか出てこない。 法を16とすると、a=3で、3,9,11,1で位数が4しかない。 a=5で、5,9,13,1でやっぱり4しかない。a=7で、7,1で位数2. a=9で9,1で位数2。ここから上面倒だな。p-xでも位数同じになるから半分しか 見なくていい、みたいな定理あるんじゃね?いやないか。1なら位数1だが、15なら 位数2だ。法が増えても似たような傾向だろう。 2ビットシフトして使わないとゴミだろう。 これ、最大位数は1/4っぽいなあ。1/2じゃないだろう。 そして、加算入りの線形合同法も法が2^32であれば最下位ビットが ゴミになるのは絶対に避けられない。 MWCに絞って考えよう。

2013年06月29日

オタマがうんこを我慢して実に良くない。 しかし、webで調べると一週間うんこが出ず、 泣きながら母親が指でかき出す、みたいな状況が大量に報告されていて、 上には上がいるもんだなと思う。一体何食ってるんだろう。 しかし問題は相対ではなく絶対なので、 毎日うんこが出ない段階でうちとしては大事件なのである。 まして今回は丸二日出ないなんていうことすらある。 うちら当たり前に毎日出るからなあ。

売れたというガベコレの本をちらりと見たのだが、 何これマジじゃん。これと対にして売られるとか悪夢すぎるぞ。 まあモノが出来上がれば完全に別物なことがすぐわかるだろうが。

問題は到達点ではなく、過程なのだと私は思っているわけだが、 賛同してくれない人はいくらでもいるだろう。 「libcではこうやってる」とかいうことを知ることよりも、 「mallocを作る、ということをどう考えてどう実現していくか」 の方に私は興味がある。結果出来るものは大したものじゃなくていい。 つうか、mallocの性能が問題になる段階で そのプロジェクトは根本的にダメなんだよ。 ほんの10年前までゲームはほとんどグローバル変数な状態でも 作れていたのだ。あの頃のゲームと今作ってるゲームの間に さしたる差はない。そりゃ一流の巨大ゲームはまた話が違うだろうが、 そんなのごく一部だろ。boostやらstlで生産性が云々、 とか言うことに価値があるほど 高度なものを作っているところが一体どれだけあるというのか。

デモシーンのカメラワークがコードで書いてあるとか、 アニメーションする人体モデルのスケルトン構造がコードで書いてあるとか、 そんなでも今よりはるかに安い予算でゲームを作れていたんだがなあ。 規模が違うと良く言うが、どうにも疑わしい。 まあ一回100人級のゲームに参加してみないとわからんのだろうが。

正直言って、エンジニアおよびプログラマ文化圏の考え方に 私はまるで馴染めない。なんであんなに異世界なんだろう。

どこかで見た覚えがある構図だと思ったら、これオタクと一緒だ。 私は客観的にそれが何なのかには興味がないんだな。 「mallocとは私にとって何か」という問題なのだろう。 「airやkanonは私にとって何か」みたいなもんだ。 構造とか描写とか文体とかは微塵も気にしなかったからな。 つまり、やってることはギャルゲーの感想文を書いてた頃から 変わってないってことだ。そしてそれはつまるところ、 あの頃ギャルゲー感想文を書いてたことが今の私を作っているということなんだろう。 私は今も自分語りをしているわけだ。 そしてまた、前の本もまた自分語りだった。

今回で、あれが売れたのが何によるものなのかがはっきりするだろう。 私が書くことに意味があったのか、 あの題材であれば私である必要がなかったのかがわかる。 どちらなのかによって、この先の行動は多少変わってくるだろう。

育児をする父親をイクメンと呼んで推進しているようだが、 さて、イクメンと呼ばれている人々はどれくらい家事をして どれくらい子供と遊んでいるのかね。

オタマを友達と遊ばせることができた。 男の子すげえな。全く動きが止まらない。 3時間ずっと走ってたぞあの子。 まああの子は男の子の中でも特別だろうが。

私の今日の疲労のかなりの部分はその子と体力勝負な遊びをしたことによる。 オタマは私とその子が相撲をしたりボールを蹴り合ったりしている横で それなりに走ったりはしゃいだり、たまに相撲を仕掛けたり、 たまにボールを蹴ったりしていたので、それなりに良かったんだと思う。

オタマのカロリー源としてレーズンバターを試してみたら、 良く食べる。これだ。 問題は蛋白質が皆無ということと、レーズンの糖質か。 しかし脂肪が足りてないと蛋白質の利用効率が落ちるので、 とにかくカロリーを取らせることには意味がある。 あと、ハムちょっと食べた。加工肉はとにかく高いので 視野に入れていなかったが、 しばらくは金がかかってもいいから買うべきか。

ハイ食材室でキロ3000円くらいのものを探そう。 そのへんのソーセージでもそれなりの品質のものはあるんだが、割高になる。 もっとも、80g入りのソーセージが2つつながった奴が480円、 というのがキロ3000円ということなので、 そう考えるとスーパーの方が安いかもしれんなあ。 もちろんキロ3000円で買うものの方が品質は桁違いにいいのだが、 今は食いさえすれば品質はそれほど重要じゃない。

そのへんで加工肉を買う場合、最初に見るのは成分表示だ。 炭水化物が100gあたり2g以下ならおおよそ良質である。 もちろん味付けがマズいことはありうるが、 少なくとも肉そのものはマシなものを使っている。 選ぶ範囲がこれでかなり狭まる。 実際見てみればわかるが、多くは2gどころか4gすら満たさない。 それくらいの量になるとかなり味が押しつけがましくなってくる。 なお、成分表示がない場合、原材料の順番を見ればいい。 結着材料、卵白、澱粉、大豆蛋白等が塩より前にあれば、おおよそマズい。 砂糖、ブドウ等、澱粉あたりの糖質が全くないということはないが、 塩より後ろに書かれていれば許容範囲だ。 香辛料より後ろにあればなお良い。 もちろん、その条件を満たしてもマズいことはあるし、 満たさなくてもそれなりに食えることはある。 しかし打率としては満たすものの方がうまいし、 オタマに食わせるならば味よりもむしろ栄養の方が問題である。 味はオタマが食う範囲であれば良い。 まあこの条件だと確実に高級品になるからうまいんだけどな。

2013年06月28日

ピクミン3ダイレクトを見た。すげえやりたい。 だが、いつやれと...メガテンすらできてないというのに。 つうか借りたゴーストトリックをどうにかやりたい。

ゲーム作ってないなあ。 手遅れになる前に復帰したいが、今はこれだ。 遅くともあと4冊書いたら現場に戻る。 早ければ今書いてる2冊で終わるが。

幅優先と深さ優先はわかってない奴多いだろう。 これを曖昧にして木とか説明するの無理だ。 1節割いてがっつり説明せんとアカン。 9章がまた伸びるな...

素数夜曲が大層いい本だが、ところどころ説明がわからんな... 著者にとって自明でもこっちにとって自明でないことがちらほらある、 ということだろう。 私も気をつけねば。

吉田武氏は、学問を作り上げてきた人への尊敬が強すぎる気がする。 いや、そりゃすごいよ。ガロアもフェルマーもすごい。 すごすぎる。しかしそれはそれとして、今の状況に照らせば、 記号にしても用語にしても話の筋にしても、 何かしらアレンジしないときついだろう。 とりわけ明治期の翻訳が今最適かどうかは見直されていい。 群とか体とか環とかは特にヤバい。せめて理解するまでは もっとわかりやすい言葉にしておいて、 そのあと「本当の名前はこれだ」と出してきた方がいいんじゃないか。 帰謬法あるいは背理法にしても、 名前出すのは10回くらいそれで証明してからでいいだろう。 それまでは「ウソを証明しようとするいつもの手口」 くらいに言っておけばいい。 ギリシャ文字もいかん。アルファベータまではまだしも、 カッパとかイオタはダメだって。シグマすら中高生相手には拒絶反応を 引き起こすだろ。一文字にこだわらず、sum()とかでいいじゃん。 先人に尊敬を払うのはいいことだが、 この人は学生に気合を求めすぎているのではなかろうか。

なお、金重明氏の数学本も大層出来が良くて、 この2冊も買ってしまおうかと思うくらいなのだが、 こちらはもう少し客観化している印象がある。 たぶん数学が大して得意なわけではないのだろう。 自分でも相当苦労したに違いない。 だからこそ13歳の娘にガロアを教えようなんて思うのだろう。 そしてそれゆえに、読者に要求する気合の量が少ない。 ただ、内容が私が今求めているものと若干ずれており、 今は素数夜曲が一番ありがたい。

私は人に説明する文章を書く時、あまり他のものを参考にしていない。 今回はアルゴリズム本だが、他人のソースコードをロクに見ていない。 普通に考えてSTLの中でも見ておいた方がいいんだが、まるで見ていない。 正直言って、他人のコードを見てもまるでわからん。 何かのアルゴリズムを理解して実装しようという時にも、 あまり詳しく説明は読んでない。 概要だけwikipediaで読んで、すぐ自分で作り始めることがほとんどだ。 もちろんいくつもの罠にひっかかって四苦八苦するが、 それをやらないと結局は理解できないので、気にせず次から次へと 罠にかかっている。 そういえばセジウィックのアルゴリズム教科書を持っているはずだが、 何故か今回重要な木に関する分冊が見つからず、見ていない。 たぶんそれでいいのだろう。 私にとって他人のコードを読むなんてのは効率の悪い学習法だ。 wikipedia程度の説明だけ読んでコードにできないようでは、 それはつまりわかっていないのである。目的は出来た実装ではなく理解であり、 それを考えれば他人のコードなんて大した役には立たない。 実装だけ欲しいなら自分で書くなんて馬鹿馬鹿しいのである。 どうしようもなくなった時にコードを探して眺めることはあるが、 大抵は時間の無駄だ。頭を使うことから逃げているだけである。

webに解説サイトは山程あるが、大抵ストーリーがない。 その方法はどういう必要があって思いついたのか。 思いつくに至る思考はどのようなものだったのか。 この二つはなんとしても必要だ。ウソでもいい。 納得の行くストーリーになっていればそれでいいのだ。 金重明や吉田武の本にはこの二つがそれなりにある。だからいい本なのである。 プログラミングにはその二つを持った本が滅多にない。 というか、私はそもそも一冊たりとも見たことがない。

ひつじこが私は文系だと言うが、たぶんそういうことなんだろう。 意義とストーリーなしには何も理解できない。 技術そのものをおもしろがることがないとは言わないが、 まずは意義があると感じないと興味が湧かない。 さらに、興味が湧いてやる気になったとしても、 きちんと理解できないと怖くて使えないので、 そのためには思いつくところまで含めたストーリーがないと 理解が弱くなって使える所まで至らない。

オタマウンコ問題。最近ウンコをしたがらない。 限界まで我慢して、そのために硬くなり、余計に苦しむことになる。 「ウンチしたら?」と言うと、泣きながら「そんなこと言わないで」と拒否する。 「おなかいたい」と泣いて椅子に座るのを嫌がったり、 変なポーズで寝転がったりしている。 太いウンコをして肛門が切れたことがトラウマになっているとか、 そういうことがあるのかもしれないが、よくわからない。 仮に太く固いウンコが原因とすれば、 それは食べる量が減って便の量が減ったからだろう。 ウンコの固さと食べ物の量や種類との関係は良く知らないので仮説でしかないが、 とにかく食ってないので関係がないとは思えない。 ストレス、運動不足、風邪、なども複合的に作用しているかもしれない。 また、そもそも腹痛が便と関係なく何らかの病気ということもありえないわけではない。 webを見ていると、3日に1回しか便が出ない子供は それほど稀ではないようである。それで問題なく生きているのであれば、 腹痛が別要因ということも考えられないわけでもない。 しかし「オッカムの剃刀」を使うならば、まず疑うべきは食べてないことだろう。

卵を食べない。オムレツにすれば食べる可能性があるが、不確定。 肉も特定の料理しか食べない。 牛肉トマト煮込みと、醤油味で焼いただけの豚切り落とし。 ホッケは気分が向けば食べる。 野菜は全くといっていいほど単体では食べない。 豆腐もがんもどきも油揚げも食べない。あれほど食べていたのがウソのようだ。 ブルーベリー、イチゴ、ラズベリーあたりは食べる。輸入冷凍物なので まるで甘くないが、これらは喜んで食べる。また、これらは ヨーグルトに入れて食わせることは可能で、ヨーグルトもその分は食べる。 リンゴは欲しがっても残すことが多い。 トマトは結構食べる。 チーズは気分が乗れば食べるが量は少ない。チェダーはダメ。ゴーダの 外側の固いところを好む。 ピスタチオは比較的食べるが、10個とかそれくらいでは メインの栄養源とはならない。それでも置いておくしかないなあ。 牛乳はそこそこ飲むが、一日に1リットルも飲まないわけで、足りない。 脂肪を強化した特濃4.5牛乳にしたため、 仮に1リットル飲めば750kcal、蛋白質は33gとなるが、 半分であれば375kcal、17gにしかならない。 野菜ジュースは気が向けば飲むが、一日平均0.5杯といったところだろう。

さて何食わせっかなあ。アボカドは久しぶりに食わせたら良く食べたが、 その後ブツブツが出た。こりゃダメだ。 ブルーベリ、ラズベリー、イチゴは水溶性食物繊維も多いので、 とりあえずは好きなだけ食わせるか。 下痢して皮膚に出てもこの際やむをえん。このウンコ問題を 解決する方が優先度が高い。

あとは外でしっかり遊ばせることだろうが、 朝そんなに行きたがらないんだよな。行っても大して遊ばない。 運動量が足りないのは間違いない。こいつ最近は歩かないしなあ。 500m先のスーパーまででも歩くのを拒否する。自転車の旨味を知ってしまった。 何か新しい外遊びを開発せねばダメだが、さてどうしたものか。 サッカーボールを蹴りながら走るのも以前は面白かったようだが、 今は全然だ。今日はすべり台でそれなりに遊んだが例外ケースだし、 自転車に乗りながらチーズを食べるという定番にも飽きてしまった。 文化的な遊びを好む割に、まだ知能と器用さが足りないので 大したことができない。このギャップが辛いところである。 もうちょっと大きくなればレゴで何か作ったり、 それなりに絵を描いたりできるようになるんだろうし、 絵本を自分で読めるようにもなるんだろう。 しかし現状それらはまだ難しい。 まどろっこしすぎて自分でやってるとストレスになり、 つい「とーちゃんやって!」になってしまう。

たぶん、産まれてひつじこが動けるようになるまでは根本解決はしないんだろう。 だましだまし行くしかない。できる対処をできる範囲でやるだけだ。 辛いとは言え、以前皮膚問題で苦労した時に比べればまだマシだろう。

赤ちゃんがデカくて、推定出産日が8月下旬とかになっている。 CEDEC行かない方がいいかもなあ。 会社の金で行きたいと言って行けないなんてことになると人としてどうかと思うし、 だからといって自腹で払って行けないとなればそれも辛い。 問題なければ夕方どこかの宴会に潜りこむ、というくらいで いいのかもしれん。行くとしても自腹だろうな。2万だし。 まあ申し込みの期限ギリギリまで待とう。まだ始まってもいない。

幅優先、深さ優先の説明書いてたら猛烈に眠くなったので帰って寝る。 もう4時だ。全然乱数に進めない。でもここは適当にはできんしなあ。

幅優先と深さ優先の説明を、消費メモリサイズを比較する実験をしながらやっている。 再帰除去も説明する。みたいなことやってたら9章がえらく長くなりそうだ。 でも仕方ないよなあ。二分ヒープはあまり深くならないから、 この手のことの重要性がピンと来ない。 そりゃ最初に前もってやっといた方がいいに決まってるが、 重要性がわからんうちに説明するのは嫌なのである。

こういう意見なら賛同できる。 演説聞いててちょっと古いんじゃないかと思ったのは、 エリートが正しい判断を下せるという信仰や、 国民国家という枠組みを前提に考えること自体だった。 国なんてサービスだと言い切ってしまえよという思いが私にはある。 もう「国の形」とか言うのやめたらいいんじゃないのか。

にしても、なぜ「市場原理主義でサヨク」という人はレアなのだ? 強いて言えば私はそうなんだろう。 確かに、市場に任せると強者がますます強くなりがちなので、 エリート層が得をする。その思想で誰が得をするか、 という所から考えれば、市場原理主義はエリート的な人達に好まれるはずなので、 その意味では不自然ではない。

素数夜曲はMWCを理解するために必要な数学を十分に含んでいるように思われる。 また、XorShiftの理解にも役立つだろうし、線形合同法を理解するにも 役立つだろう。さらに言えば、ハッシュ法などで補助的に必要になる 素数関係のプログラムにも使える。 要するに、この本はオイラーの贈物と同様に重要で、しかも実用になる本だ。

まずはMWCの説明を書き始めよう。そして、 自分がわかってないことを見つけたら素数夜曲を読んで理解し、 それを人に説明できるレベルまで消化し、説明を書く。 そして最後に、その説明を 「数学に興味がない読者がそれなりに腑に落ちて使える最低限」 にまで削り落とす。 削り落とす前の文章はzipに入れておくとしよう。

毎度のことだがひどい話だな。 現時点で全くわかってないことを今から勉強して、 それで本を書こうというのだから。 しかしそうやって書いた前の本が売れたんだし、 まあいいんじゃないかな。それができるのが私の強みなんだろうよたぶん。

2013年06月25日

二分木しんどい。キーに重複があると何もかもが複雑になる。 回転すら自由にできない。 なので補助キーを設けて重複がない状態にしたいのだが、 その考え方を自然に導入するストーリーがみつからなければ 導入できない。テトリス本に比べればストーリーに 気を使う度合は小さいが、 それでもストーリーを無視したら私の本じゃなくなる。

ちょっといじるだけでまともに動かなくなる。 キーの重複さえなければと思うが。

キーの重複をなくしても削除がまともに動かん... こういうの私は単純に苦手だ。 二分検索木の削除はなんでこんなに面倒なんだろう。 もうこの段階で普通はアウトなんじゃないか。 スキップリストはあんなに簡単だったのになあ。

一番近い数を持つ要素でおきかえると言うが、 要素が隣り合ってる場合は特別扱いしないといけない。 そのへんにあるサンプルコードはやけに単純だが、 それは一つには親ポインタを持たず片方向であるか、 キーだけ交換してることによる。 コンテナの中にノード型が隠蔽されていればキーだけ交換できるが、 キーが莫大にデカくてコピーし難い場合は性能上許せないし、 そもそもノード型が露出していればそれは無理だ。 また、片方向リスト、つまり親ポインタがない実装であれば いろいろと楽になる。平衡化する時には問題があるにせよ、 単なる二分木に親ポインタはなくてもいい。 しかし、親ポインタがなければ削除で上から検索しつつ降りていく破目になる。 たかがlogNじゃんと思うかもしれないが、これがバカにならないのだ。 スキップリストもメモリを食ったとしても双方向の方がいい。 追加と削除に比べて検索が圧倒的に多い用途ならわからんでもないが、 それなら配列に入れて二分検索しろよという気分になる。 追加と削除を頻繁にやるから木とかスキップリストにしているのだ。 AVL木より赤黒木が流行ってるのはそのへんだろう。 平衡化にあまりコストをかけたくないのである。

なんとなく回転操作を入れるだけでも、O(N^0.5)まで検索の計算量が落ちる。 さて問題は、これをO(logN)まで落とすアルゴリズムを思いつくための ストーリーをどう書くかだ。 できればもう一段改良をしてO(N^0.25)まで落としてから、 O(logN)のtreapを導入したい。 AVL木は思いつくこと自体は簡単なのだが、実装がこの本のレベルを超える。 もちろん、説明の質でそこを補うことも考えられなくはないので、 AVL木も選択肢から捨てる気はない。 なお、赤黒木は扱わない方向で確定だ。 2-3-4木を経由しなければ絶対り理解できず、 2-3-4木の実装は赤黒木の比ではない難易度になる。 どう考えても平衡二分木の中で一番簡単なのは追加でしか平衡化しないtreapなので、 それを最終形としたいのだが、 さてどうすればtreapまで連れて行けるだろうか。

O(N^0.33)まで落ちないかなあ。適当な工夫で。 しかもそれがtreapを理解するためのヒントになっているような工夫であれば なお良い。

treapの劇的に簡単な説明思いついた。あ、これでいいじゃん。 だが、いきなりこれは唐突だ。この説明を始めるまでの段階を踏まねばならん。

どうにかtreapへの導入ができた。 論理が粗すぎるので後で相当な手直しはいるだろうが、 大筋はこれで行こう。あとはtreap実装して性能測って、 メモリ管理に応用して、用語解説と理屈の補足して、まとめ書いて、 9章終わり。明日、遅くても明後日で片づく。 そしたら乱数。MWCを理解し、理解させる。 でもまあ、そのへんでテトリス本の校正に戻るかな。 MWCの解説を本気で書けるようならば、 Xorshiftは触れなくていいだろう。M系列もいらん。

素数夜曲買おう。時間が惜しい。

オタマが朝早い。夏だからな。そしてその朝早い時間に遊びに出ねばならない。 ひつじこにも言われたし。 だが、私はこうして3時とか4時とかまで仕事をしているわけで、 この時間から寝ればオタマの相手をするのは困難である。 つまり、寝ないというのが最適解だ。 これでオタマが8時とか9時とかまで起きなかったらどうすりゃいいのかわからんけどな。

というわけで、treapの実装やっちまおう。もう4時だが。

5時。いかん。猛烈に眠い。treapもできたし帰るか。 でも中途半端に寝てもきついし、オタマが起きるまで粘りたいな。

帰ろうにも退勤登録のwebが死んでる。これやらずに帰ると 後で面倒なんだがなあ。ましてこんな時間になってるわけで。

2013年06月24日

投票率低いな。 みんなそんなに創価学会と共産党を勝たせたいのか? 都議選挙なんて普通の人にとってはどうでもいいからな。 そのどうでもいいことの積み重ねが破滅につながっていくわけだが。 先進国で新興宗教がこんな政治力を持ってるのはどうかと思うが、 宗教を毛嫌いするのもそれはそれでマズいんだろう。 なぜこういう組織が力を持つのか、 ということをよくよく考えるべきなんだろうし。

オタマがゲロ吐いたと知らせがあって、夜中に慌てて帰宅。 最近オタマにとっては災難だからなあ。 行きたくもない幼稚園に行かされ、母親は動けずロクに遊んでもらえない。 育児休暇取るくらいのことはすべきなんだろうが、 妊娠の本番はこれからなわけで、さすがに半年とか休むわけにも行かんのだ。 とにかく本は出してしまわないとマズい。 生まれる前後1ヶ月づつくらいは育児休暇に近い状態に ならざるを得ないだろうし。まあ夜中は働くんだが。

株価が下がって円高になっているというが、 うちはまだプラス25%くらい。一時40%くらいだったので、 あの時に売り抜けていれば得したんだろうが、気にしない。 100万くらい違ったのは確かだが、そこで全部売ってしまうと、 今度はいつ買い直すかで悩まないといけなくなる。 時間方向の分散をやり直すと 円が多すぎる時期が年単位で続くことになるし、 ドーンと買い戻す勇気はたぶん出ない。 だから放っておくのが一番いいのだ。

太陽光発電は大規模施設による集中化が進む、と言う人がいるが、 それはどうかな。 クラウドと同じ構図だと言うが、その見方はおかしい。 データはどこからでもアクセスできた方がいいし、 バックアップをそれぞれでやるのはいつまで経っても非効率だろう。 しかし、電気はどこで作っても電気だ。 送電ロス、そして規模が大してコストダウンに寄与しない点を考えれば、 最終形は分散型だろう。最後は土地制約に落ちつくはずで、 それなら太陽光なんて使わず火力なり原子力なりの方が面積効率が良い。 太陽光はつまるところ、他に使いようがない面積を使う手段なのである。 よほど化石燃料が値上りしない限り、それ以上のものにはなれない。

コンピュータにしても、P2P的な感じに蓄積が勝手に多重化され、 計算力も勝手に並列化されるような状況になれば、 どこぞにクラスタがあって集中処理、という今の状況は 変わるかもしれないと思うけどな。 一台あたりの計算能力が今の100倍とかになった時に、 今の形が最適であり続けるとは思えない。 転送と計算のコスト比が変われば、どこで計算すべきかは変わる。

temash積んだマザーは出ないのか。 haswell積んだthinkpadもまだ出てこない。

スタック順走査だと深くなる時にスタックオーバーフローで死ぬ。 キューにつっこみながらループで走査すればいいが、 つっこむキューをnewせねばならない。個数も持っておかないとダメだ。 そこで、スタック走査順を基礎に、やれるだけループで回し、 複数の子があれば、どれか一つだけループで処理、 残りは再帰、とする。これも説明せんとなあ...

二分木はキーに同じの入ってるとそこらじゅうで面倒くさくなるな。 スキップリストが天国のように思える。

2013年06月23日

自民党が蒲田で演説会をやっていたので見てきた。

とりあえず「政権は安定させましょう」は良くない。 クソな政権でも安定した方がいい、 と解釈されるのは本意ではあるまい。 安定は与党がまともである結果であるべきで、 むしろそう言ってしまうくらいの方が潔いと思うのだが。

つなぎの平氏はいつも通りまともなことを言っている。 いきなり民主党の演説をケチョンケチョンにけなすあたりは 若干どうかと思うが。 あと、「政策のこと何も言ってない。勢いだけ」 というのは自民党の都議候補3人中2人にも同じことが言えた。 あっさりブーメランである。 まあ、きっと仲間であっても良くは思ってないんだろうが。 「人の印象で選ぶな。政策を見ろ」とああいう場で言うのは、 後で演説する都議候補にプレッシャーをかける意味合いでもあったかもしれない。

鈴木二人は辛いなあ。 「がんばってます」とか「ありがとうございます」とか、 「応援よろしく」とか「世界一に」とか、 そういうことを聞きに来たんじゃない。 挨拶としてそういうのが一言二言あるのはかまわないが、 それだけで終わっちゃダメだろう。 面白くはないが防災のことを長々としゃべってる 神林氏の方がずっとまともに見える。

安倍氏はトリクルダウンを主張。 誰かが景気良くなればそのうちみんなに巡ってくるという主張。 また、政治家は伸びる産業を選び出すことができ、 そうすべきだ、という主張。 あとは何かと枠組みが国民国家。 それと規制緩和。 大田区の中小企業を称えるのも忘れない。 演説は聞き取りにくさはあるが見事で、 たまに観衆の特定の誰かに語りかけるみたいなテクニックも駆使。 盛り上げ方もうまい。

私は国なんてサービスだと思うくらいでいいと思う左翼だ。 岡田本を読んでなおさらそう思うようになった。 誰もがどこかの国家に属してる、みたいなのが当たり前になったのは つい最近なわけで、私は世界市民的な考え方の方が好きである。 しかし、現段階では国民国家で世界は覆われており、 それぞれが自国の利益のためにしのぎを削っている。 日本がそのバトルから降りるのは不可能だ。 だから、「結局国際競争力がないとダメ」 という自民党の主張には賛同するし、普通に軍を持って、 普通に国防や外交をして、普通に国益のために戦略を練る方向でいい。 EUならまだしも、日本はお隣と経済統合や、まして政治統合を できるような段階にはない。隣の3国は殺る気満々だからな。

日本で栄える企業が日本人による日本企業である必要はないと思うが。 日本人を雇って給料を払う企業は、本社がどこにあってもかまわない。 個人に対してはまだ国をサービスとして見るのは難しいが、 ある程度以上の規模の企業に対しては国は完全にサービスである。 いいサービスを企業は選ぶ。サービス競争は避けられない。

政治家が当たりの産業を選べる、という主張は疑わしい。 2020年ごろには電気自動車が来るかもしれない、 というのはそうかもしれないが、 そのために国が予算をつけるべきかと言われれば私は賛同はできない。 そもそも電気自動車が来るかどうかは相当怪しいけどな。 電池の値段が1/4とかに落ちた上で、 電池のエネルギー密度が倍くらいに増え、 さらに安い急速充電器が家に置ける状況にならないといけない。 そこまで行かないと普通の車が電気になる所まで行けない。 長距離トラックなんかは今世紀中に電化されるかどうかすら 怪しいレベルだろう。 そういうわけで、私は「成長戦略」なんてものにあまり期待はしてない。 あからさまに邪魔してる所だけをどうにかしてくれればいい。 規制緩和の方向に行くっぽいので、それは歓迎だが、 本当に害の大きい規制はとっくに消えてるという話も聞くんだよな。 世の中には外部性を克服するために必要な規制もあるわけだし。

ドラクエベンチ。この空のブルームの不自然さはどうにかならんのか。 人間の目は適応するんだから、ずっとブルームしっぱなしは絶対おかしい。 何もしてない低品質設定の方が潔くて見やすい。 まあジャギーは気になるが。アルファキルな草とか。

そもそも頂点少ないのが気になるので他のことはどうでもいいんだが。 Wii版のモデルだろうしなあ。 テッセレーションでもかまして動的に増やせればいいのかもしれんが、 まあテッセレーションがどこでも当たり前に使えるようになるのはもう数年後だろう。 性能とか技術の問題もあるが、とにかく運用が問題だ。

にしても重いな。最高品質D4解像度で1881か。低品質でも4500。 このPCそこそこ速いはずなんだがなあ。 まあGPUの世代がゲフォ8なのがキツいのか。CPUは3コアがそれなりに働いてる。

鈴木あきまさ氏。サイト見たが内容がない。ブログすら。 鈴木あきひろ氏。ブログ見た感じ、経済のことはそこそこ知ってそうな印象だが、 この文章じゃ伝わらんだろ。長すぎるし、つまり何なのかわかりにくい。 演説も印象悪かったしなあ。 神林茂氏。サイト見たが本当防災の人だな。 防災そのものは大切なのだが、土木建設系と癒着しがちな分野なので 判断が難しい。この人は近所に住んでいてたまに見かける。 家もなんか普通だし、印象は悪くない。 国政レベルの主張はおまけ程度で、 とにかく地域の人という印象。だから何かと細かい。 都政レベルならこういう人の方がいい気はするなあ。

金村氏。主張がサイトに見当たらん。元秘書。 田中氏。これもよくわからん。 創価学会は個人がどんなにまともでも対象外なので調べない。 やなせ氏。みんなの党くさい。無駄削減。稼げる体質。 それは正しいんだが、この人個人の考えがよくわからん。 4%成長10年すれば50%、とか、そんなおおざっぱな数字で物言う人は 信じられんがなあ。 今日安倍氏は「どんな政策には副作用がある。批判もあるし、 実感がわかないという言葉も聞く。でも信じてもらうしかない。このまま行く」 と宣言していた。今の路線が正しいかどうかは知らんが、 そう言う人間は他人に文句言ってるだけの奴よりは信用できるだろう。 ところで、JR蒲田と京急蒲田、そして大鳥居をつなぐ電車の計画があるのな。 この人は「金かかりすぎだろ。割に合うのか?」と発言している。 うちはその電車うれしいけどな。でも割に合うかと言われると確かにわからん。 しかし、割に合うか、という考え方は究極的には役に立たないことを 知っておく必要がある。なぜなら、答えは出ないからだ。 それは価値判断であって、曖昧で恣意的な「経済効果」の計算で プラスになるかマイナスになるかで決めていいことではない。 それはゲームでもそうだ。割に合うか?という問いが出てきていいのは、 どうでもいい分野だけだ。

那須氏。保育園問題でがんばってるのは評価する。 しかし、原発とか食糧自給率とか、 そういうどうでもいいことに首をつっこむのはどうかと思う。 都議レベルであれば、政策も主張も一個しかない、 ということは許されるし、そういう人が一定数いてもいいのではなかろうか。 でもまあ、この人はいわゆる「プロ市民」にしか見えないので、 私が入れることはない。「子供を戦争に行かせない」はいい。私も賛成だ。 だが、そのためにどうする気だ?左翼は大抵そこを言わない。

やながせ氏。みんなと何が違うんだろこれ。 とりあえず放射脳なので除外。 いろいろあったが、今の私は「今回の原発事故で出た放射線は騒ぐほどじゃない」 と思っている。原発の北西方向の土地ならともかく、 東京で騒ぐことじゃない。まして、瓦礫についている程度で騒ぐのは変だし、 そもそも被災地に集中しているダメージを日本全体で分担するのが当然だろう。 うちらが「寄るな放射能」と騒いで瓦礫を拒否するようなマネは 人間として下劣である。 もちろん、瓦礫を処理するもっとマシな方法があるかどうかの検討は 別途なされるべきで、被災地の中に事実上放棄する土地があるなら そこに集めて100年放置、という血も涙もない解決策だってあるだろう。 実際被災地はどこも瓦礫の山がそこかしこにあり、 どうにかなる兆しはない。何十年かして木でも生えるんじゃないかね、 と思えるくらいだ。もともと過疎っていたりするし、復旧できるとも 思えなかったりもするわけで、だったら放置で良くね? というのは合理的な判断ではある。

つうか、元民主党か。そして放射脳。ないわ。 維新は市場原理主義一本でやってくれれば入れてもいいのになあ。

永井氏。今の区長に反発して自民党を出た人っぽい。 web上には情報もないしブログもtwitterもわずかだが、正直好感が持てる。人として。 しかし、なぜ維新にいるんだこの人的な状況もあって、なんつうかかわいそうだ。

まあこんなもんだろ。これ以上選挙にコストはかけられん。 消去法で一人しか残らない。

今日の自民党の演説会は、どっかりと諸々癒着した昔の自民党と、 野党を経て多少なりとも新しくなった自民党の二つが まるで調和してない印象でおかしかった。 平氏や安倍氏と、区長はどう考えても敵同士にしか見えん。

人で選ぶか政策で選ぶか、は微妙な問題だ。 政策は状況によって変わりうる。どうするのがいいかは素人にはわからん。 それは定性的でなく定量的な問題だからだ。 定量的な問題は専門家にしか処理できないのである。 そういうわけで、政策はよくわからんが人間がまともそうなので入れる、 というのは一定の合理性を持つ。 いつ増税するのがいいかはわからなくても、 増税についての考え方がはっきりしていて、人間がまともな人物がいるのであれば、 結論はその人に委ねたっていい。 しかしそれはそれとして、定量的なところにまで踏み込んで 個人個人がもっと考えた方がいい、という平氏の主張はもっともだと思う。 多少は考えろおまえら、ということだわな。

2013年06月21日

9章は探索木。 とりあえず素直な二分探索木までやった。 「なんだこれでいいじゃん」と思うくらい速いのだが、 それは入力がランダムだからである。 読者には入力に依存して性能がガタ落ちする様を 見ていただこう。

でこれをどうにかするために何を入れるかが問題なんだよな。 自然に思いつく高速化、つまり平衡化は何だろう。 とりあえず思いつきでできる対処を少しして、 その後真打登場とするのがいい。 でないと偉大なアルゴリズムの偉大さがわからないからだ。

treapだろうなあ。

木の回転の概念を説明した。 回転という言葉はたぶんものすごくわかりにくいので、 「ずらし」とした。天秤の支点をずらすイメージの方がわかりやすい。 脚注で「普通回転と呼ぶ」と書いておけば問題ないだろ。

malloc本は意欲的な試みだと思うが、 売れるかどうかはまったくわからんな。 テトリス本はなおさらそうだ。

編集さんがだいぶ進めてくれているので、 9章片づいたところでテトリス本に戻ろう。 さすがに土日で終わるだろ。 treapまでかな。treapが十分速ければ赤黒木はいらん気がする。 逆に、やってる最中に実装がもっと簡単な平衡木が見つかるかもしれん。 AVL木の方が実装簡単だったりしないか。

2013年06月20日

スキップリストを使ったベストマッチアロケータを作って、 説明を書いてみた。まだ粗いがおおよそこんなもんだろう。 ページ数はもう350ページ近くなっている。 え?全部で500くらいだと思ってたんだけど、無理じゃね?

でも8月末締切。 編集さんには「テトリス本の校正が最後まで来るまでこっち書いてるから早くしてね」 と言っておいた。出版社的にはmalloc本の方が欲しいのかもしれんが、 でも思ってるようなものじゃないと思うぞ。 mallocはダシにすぎず、主題はあくまでもアルゴリズムだからだ。 もちろんmallocはそれなりなものができるつもりだが、 別にすごいmallocを作るつもりはない。 それに、そんなすごいものなんて、実際はないんだよ。 総合的に見て良いものは、大抵の場合それほど複雑でも高度でもない。 新しい手法ほど適用範囲が狭くなるのが常なのだ。例外は限られている。

鈴置氏の朝鮮解説記事はおもろいなあ。 一回消した日経BPのアカウントを作り直してしまった。 岡田英弘読んだり鈴置高史読んだり、私は立派なネトウヨだな。

韓国が反日を強めているが、 鈴置氏はこれを中国に接近するために意図的にやっていると言う。 アメリカは中国と距離を置くように命令するが、 それを断わるのに日本をダシにするのである。 例えば、「日本と軍事協力しろ」と言えば、 「日本が反省しないから無理」と日本のせいにして断わる。 中国は喜ぶ。そうやって中国に対してのポイント稼ぎをして、 理想的には中国との距離をアメリカと同等まで縮めたいのだと言う。 すでに経済上の結びつきは中国の方が強く、 どうせだったら政治軍事上の結びつきももう少し中国に寄せた方が 都合がいい、というわけだ。 感情的にも中国側に立つことに拒否感はなく、 むしろなんで海の向こうと同盟してるのかわからない的な思いもあるらしい。

朝鮮半島が丸ごと中国の勢力圏になる、というのはだいぶありそうな未来なんだろう。 アメリカ的が韓国を勢力下に置くのは高くつくだろうから、 何かのはずみで撤退しかねない、という言説は良く読む。 しかし実際そうなったら日本が最前線だ。

一部の人は「日本もアメリカと手を切って中国につけよ」と言うが、 どうなんだろうなあ。 岡田本を信じるならば、日本は7世紀以降中国と手を結んだことはない。 敵とまでは言わなくとも、中国の勢力下に入ることは 全力で拒否してきている。それが変わるのがいいのか悪いのかはわからんなあ。 左翼が流行ったこの数十年の間は中国への拒否反応も薄れていたが、 左翼が廃れつつある今は見事に反動が来ている。 やっぱり今回も全力で拒否するんじゃなかろうか。

2013年06月19日

malloc本は8月締切の予定になった。 mallocを題材にアルゴリズムの勉強をする本なのだが、 mallocの書き方を知るための本だと思われると困るかもしれない。 キャッシュ、特殊な使い方に特化した速度向上、 OSや仮想記憶、STLコンテナへの差し込み、 過度なビット演算、などは扱わない。 最新のものの性能も並ぶべくもないからだ。 そもそも、OS標準に速度で勝とうとすら思ってない。

2013年06月18日

会社で上司と面談。穀潰しスンマセン、的な。 まあきっと10月までには2冊片づいて、 1冊は出版されてアマゾンで絶賛されてるに違いない。 今は我慢の時だ。

そうならなかったら本当きついな。 想像しただけで泣けてくる。 昔同人誌の売れ残りを捨てた時は悲しかったが、 たぶんあの比じゃない。 そして、私はまるで絶賛されるとは思っていないのである。 自分ではいい仕事をしている気でいるが、 こういうのの大半は勘違いだ。世の中はうまく行かないものであって、 だからこそうまく行く例が輝くのだし、 うまく行った人間は速やかに没落するのである。

校正対応が進まないのだが、 来たものを一瞬でつぶして「まだ?」と催促するくらいすれば もっと進むのは早まるのだろう。 そうしてないのは、出るのが怖いからなのだろうか。 アルゴリズムの勉強が楽しいから、というのもあるだろうし、 まとまった量来てからじゃないと面倒くさいというのもある。

甘いものが猛烈に食べたくなるのは、30年にわたる糖質まみれ生活で 脳がそういうふうにできてしまっているせいだ。 体は全力で拒否している。 わずか30gくらいでも耐え難いほど眠くなるのは、 インスリンを出す機能が鈍っていて 血糖値を下げるのが遅れるからだろう。 そのくせ遅れて大量に出るために、下がりすぎて低血糖症状が出る。 この不快さは半端ではない。

数ヶ月完全に甘いものを排除するくらいのことをして、 完全に断ってしまった方が楽なんだろうが、 今現在欲求を抑えるのが大変すぎて困る。 完全にこれ禁断症状だ。 エリスリトールのチョコレートか何かでおだやかに遠ざかる方向の 方がいい気もするが、それが甘えであることに違いはない。 そもそも400gで2300円とか、ありえん値段である。 もっと糖質制限が流行ればエリスリトールの生産量も増えて安くなるんだろうが。

周り仕事してんなあ。本当私仕事してねえなあ。 社会と業界のため、くらいは言えるが、会社のためか?と言われると 自信を持っては言えん。 上司は「仕事として承認してるんだからちゃんとやれ」と言うが、 この仕事してない感はきつい。まあ仕方ない。自分で選んだ道だ。

オタマ幼稚園。本当雑だなこの幼稚園。 しかし、もう一つの仕事が丁寧な幼稚園よりもオタマの乗りはいい。 人が少なくて密度が小さいのと、置いてあるおもちゃが凝ってないために かえってオタマには合っているのが原因だろうか。 しかし、今やってるのは学研から派遣された人間で、 幼稚園の職員がやっているわけではない。 つまり、入園後にどうかは今やってることからはまるではかれないのである。 ただ、「これを良しとする幼稚園である」ということだけはわかる。 あと、この紫外線まみれの季節に半袖半ズボンで庭に並ばせて数分以上放置状態なのは かなりどうかと思う。つまり私としては、「ねえよ」としか言いようがない。 行くにしても他の二つだろう。 しかし、一番近いのだ。

幼稚園問題、食わない問題、トイレ問題。最近問題ばかりだな... しかしまあ、なるようになるだろ。 出産まで行けば多少は状況が変わる。 良くなるか悪くなるかは知らんが。 あとは本が出てしまえば私の頭が楽になる。

食わないのは、まあいいよ。健康状態が悪化するほど食わないとなれば問題だが、 牛乳とピスタチオ、たまに牛肉のトマト煮、ホッケ、 ヨーグルト、というあたりは全く食わないわけではない。 レバー食べてくれればかなり安心できるので、今日はレバーを試すか。

トイレが一番面倒だな正直。洗濯物の量が半端ないし、とにかく面倒くさい。 おむつに戻した方がいいのか?少なくともその方が楽だし、 オタマの機嫌はマシになるだろう。これはひつじこと相談。

2013年06月17日

MWCのパラメータは乗数と法。法が先に決まり、これをbとする。 乗数aを決めると、bの法ab-1で累乗した時に最初に1になるのはいつか、 ということから周期が定まる。 bをひたすら累乗していけば周期は求まるので、 適当なaについてひたすら周期を求め、それが長くなるパラメータを 列挙して、そのうちから乱数としての挙動が良いものを選べばいい。 問題は、周期が2の32乗を超えてくると到底こんな計算は やっていられないということだ。 32乗程度でも、aが一つならともかく、たくさん試すなら絶望的になる。

というわけで、第一に周期、つまりbの位数を高速に求めたい。 第二に、周期が長くなるaの候補を何らかの理屈で絞りたい。 この二つの欲求があるということになる。

まず、pが素数でなければ、原始根はない。 したがって、ab-1が素数になるようなa以外は考えなくて良い。 しかし、素数の判定も結構な時間がかかるわけで、 これはさしたる助けにはならない。 うん。行きづまった。数学の助けなしで進むのは非効率すぎる。

これは、このへんについて情報収集した方がいいな。 本買おう。だが問題はいつ本屋に行くんだよ、ということだな。 というわけで、とりあえずアマゾンで検索して 出てきたものを図書館で検索。「素数夜曲」を予約してみた。 というわけで、一旦忘れよう。MWCに関しては 整数論がわからんと根本的に不可能だ。 今の知識で考えても効率が悪い。 整数論を再発明する破目になるが、そんな才能はないから全く進めなくなる。

私は普通に考えて吉田武の本は全部買い揃えるべきだよな。 私ってつまるところこの路線をプログラムでやってるわけで、 これほど参考になるものはなかろう。 しかし、「ここまでキモくなるのもなあ」という思いがあったりもして 買う気になれなかったりする、というのもある。 オイラーの贈物は間違いなく素晴しいのだが、 虚数の情緒はちょっとなあ。でも、もし12年後までに あれ以上のものを用意できないのであれば、 私はオタマにあの本を買い与えるだろう。

というわけで、8章は乱数でなくスキップリストにすることにした。 説明は比較的楽。

2013年06月16日

風呂に入ってる時ひつじこの嗚咽が聞こえてきた何事かと思ったが、 さだまさしの歌を聴いて泣いてるだけだった。毎度人騒がせで困る。

HbA1cな。糖尿病を疑うなら真っ先に調べるべき値だ。 これが低ければ、仮にインスリンの出が悪くて経口ブドウ糖負荷試験 でアウトでも気にする必要はない。 食生活その他でその弱点を補っている証拠だからだ。 妊婦の血液検査でもそれさえ見ていればそれで済むはずなんだがな。 なお、献血していればこれの代わりにグリコアルブミンの検査があるので役立つ。 1/3すればHbA1cになる。

岡田英弘の本はおもろいなあ。 何々がどうだった、という事実に関してはどうせ議論の余地があるんだろうが、 今の考えで昔を見るなとか、歴史に善悪を持ちこむなとか、 昔の資料には書いた人の事情が入っているから差し引けとか、 そういう当たり前のことがとてもおもろい。

700年前後の日本が今のマレーシアみたいなもんだった、 というのは本当かどうかは知らんがすごく面白い。 あとは、中国の人と日本の人では物の考え方が全然違うんだから それを自覚しろ、という話も面白かった。 良い悪いではない。「本当はどうだったか、なんてことはどうでもいい」 というのは中国や韓国のやることを見ていればすぐわかる。 欲しい結果を導くための道具として後から理由をでっちあげる、 というのはうちらの感覚では悪だが、彼等にとってはそうではないし、 それを悪と考える考え方が世界的にメジャーなわけでもない。 歴史を後からでっちあげて何が悪い、と開き直られたらそれまでだ。 何が悪いわけでもないからな。嫌なだけで。 それに、この人によれば日本書紀もたいがいだし古事記に至っては偽書 ということになるのだから日本人も大差ない。 最初の天皇は天武天皇で、それより前は天皇ではなく 大阪あたりのローカルな王様で、しかも実在がかなり疑わしいそうだ。

ゲームの価値が相対的に下がっていて、所得の中央値が下がっている以上、 ゲームの平均価格が下がることを前提に商売をすべきで、 数がべらぼうに出る公算があるとかいうのでない限り、 制作費は一定のところに抑えないとどうにもならない。

ひつじこが「タイカレー大丈夫かも」と言うので、 乏しい材料で久しぶりに作った。 大根半分、豚肉200gくらい、クミン、ターメリック、 にんにく、ピーマン、タイカレーペースト、 というあたりを炒めて、ニョクマムとココナツミルクを入れて終わり。 ナンプラーではないが、まあ似たようなもんだからいいだろ。 とか言うと向こうの人には怒られそうだが。 ナンプラーが若干多すぎた気はするが、それなりにできた。 あと、クミンはやっぱりすりつぶした方がいいなあ。 まあうちにすりこぎはないから無理なんだが。 あと炒める油もオリーブオイルなのはそれほど問題ない。 オリーブの臭いなんてかき消されるからだ。

週末のトイレトレーニング作戦は基本敗北。 トイレに行くくらいなら漏らすことを選ぶ、オタマの意思の強さに負けた。 時期を逸したのが痛いんだろうが、 逆に言えば心の問題なので、ひつじこがトイレに行きたくなる素敵な 策を思いつけば一瞬で解決するということでもある。 おしっこを我慢する能力はすでに相当高く、 よほどせっぱつまらない限りは漏らさないのだ。 なので、昼間パンツをはかせておいても、 そう簡単には漏らさない。漏らすにしても、一日一回漏らすくらいなら 大した手間でもないので、基本昼間はおむつなしにしたいと思う。 まあ漏らすと服は全部取り換えになるので面倒は面倒だが、 とりあえず外堀は埋めておこうと思う。 もしかしたら漏らすのが嫌になってトイレに行くような心境の変化が 訪れるかもしれない。というわけで、基本昼間は布団を上げておこう。 オタマが小さい頃は好き放題動いて躊躇なくコケられるように敷きっぱなしに していたが、最近はそうする必要ももうない。 まあそのかわりにひつじこのために必要ではあるんだが。

萩中公園の建物には子供を遊ばせる部屋がある。 昼間は暑いのでそこにいたのだが、 今日は先客のママ軍団がいて敷物を敷いて弁当を食べていた。 子供は放置状態。椅子をひきずって床に傷はつけるわ、 絵本をちぎるわ、読みもしないのに散らかすわで、ひどい有様である。 あからさまなヤンキーならまだわからんでもないが、 身なりから推察するにそれほどヤンキーとも思えない。まあ上品とは言えんが。 もっとも後から来た別の集団はもっと上品そうに見えたのに やってることが大差なかったりして、 これは階層の問題じゃないのかもなあと思った。 つうか、飲み終えたコーヒーの缶を地べたに置くなよ! こっちはボール遊びしてんだぞ! そもそも弁当の真ん中にボールがつっこんでもかまわないのか?

なんだか腹が経ってきたわけだが、丁度 オタマにも正義感があるのか「本は片づけた方がいいねえ」などと言うので、 「椅子が散らかってるなあ。片づけに行こっか」「絵本が出しっぱなしだねえ。片づけよっか」 などと声をかけて片づける遊びをした。 椅子はオタマが真似をして引きずろうとしたので、 「椅子は"ちからもち"で持った方が楽しいよ。とーちゃんもちからもちしよう」 と持ち上げるように仕向けた。 喜んで「ちからもちー」と言いながら持ち上げて運ぶ。 そして片づけたら大袈裟に誉める。 そんな嫌がらせをしながら過ごした。連中は基本ガン無視である。 ママ軍団の一人がこっちにこっそりあやまってきたりもしたが、 他のママとの関係を崩さないように配慮しているのがわかって面白い。 にしても絵本を片づけるのは第二集団のすぐそこでやっていたのだが、 当然手伝おうとはしなかった。必死に無視である。 少々上品な格好をしていてもこの程度か。

ひつじこはこんなアホ共の仲間にならんでいい。たぶん一人づつならそう悪くもないの だろうが、徒党を組むとどうしようもなくなる。 もちろんこれは女に限らんし、私も身に覚えがあるのでそう強くは言えない。 つまるところ人間というのはそういうものなのだろう。 そして、専業主婦の集団には、そのマイナス面が 強く出やすい何かがあるのだ。

まあタダだから仕方ない、というのはあるのだが、 タダで使えるからこそ使い方には気をつけねばならんし、 子供にもそれを伝える努力をすべきだ。 もちろん、椅子を引きずる遊びが楽しいのであれば、 それを頭ごなしに否定してはかわいそうだし逆効果だ。 物は使えば傷がつくのであって、必要以上に丁寧に扱うことはない。 そもそもあの部屋とそこの備品が何のためにあるかと言えば、 子供が遊ぶためにあるのであり、損耗が早いのは当然である。 昨日はあそこでオタマがおしっこ漏らして床に垂れたしな。 しかし、それはそれとして公共のものを大事にしようという心掛けくらいは あっても良かろう。 それに、家の椅子であれをやられたいとは連中も思っていないだろうに。 あんなに大々的にやったら、家でもやると思うぞ? それで家でだけ禁止するような理不尽なマネをするのか? するんだろうなあきっと。

うちの母親もああいうママ集団にはまるで交わらなかった印象があるが、 どうだったんだろう。「授業参観ごときに何スーツとか着ておしゃれしてんだか」 みたいなことを言っていたので、たぶん交わらなかったんだろうな。 社宅での近所づきあいも、夫の会社内での地位で序列が決まる雰囲気が 馬鹿馬鹿しいみたいなことを言っていた気がする。 千葉に引っ越した直後はかなりストレスフルな状況だった気がするな。 私は家の前に穴も掘れず近くに川もなく馬もおらず雪も降らないので どうやって遊んでいいのかわからず相当困ったが、 親は親で都会的な人間関係の気持ち悪さにかなり悩まされていたように思う。 私が高校で家を出た後はわからんが。 次第に折れていったのかもしれんし、そうでもなかったのかもしれん。

うちは私の友達にとっては居心地が良かったようだ。 それはうちの母親の性質が大きい。 なにせ遊びに来た子供を全く客扱いしない。菓子も出さんし、 丁度掃除をしていたりすると容赦なく手伝わせる。 きっと奴等も自分の家では手伝いなんてしないんだろうが、 うちに来ると普通に楽しそうに窓磨きをするのである。 私がひつじこを好きなのは、そのへんが似ているからなのかもしれない。 まあ太極拳習いに来るとか言う段階で相当変だしなひつじこ。

ひつじこは見た目が若いらしい。友達に言われたそうだ。まあ若いと思う。 人の老化具合は生活と遺伝子で決まるが、 たぶんひつじこは遺伝子的に有利っぽい。会った時から若かった。 あるいは小さい頃からロクに食わなかったことで、虚弱ではありつつも エネルギー過剰による酸化ストレスが小さかったのが効いているのかもしれない。 加えて、今の生活も並の生活に比べれば老化因子は少ないはずだ。 まず化粧をしない。圧倒的優位だ。 あんなに皮膚こすったり化学物質つけたりすれば、そりゃ痛むだろ。

「化粧は礼儀」とか言ってる人は、人に考え方を押しつけて社会を窮屈にしている。 仕事で効果が異なるというわけでもなければ好きにさせてやれよ。 ましてそれを男が言っているとしたらなおさら度しがたい。 普段はやらないが、やる時はドハデ、というイタリアあたりの化粧習慣の方が まだマシだと思う。

洗剤で顔を洗わないのも圧倒的にいいだろう。 顔どころか、体には一切洗剤を使っていない。 細菌の生態系が壊れないし、単純に刺激が少ない。 皮膚の損傷は抑えられる。 また、紫外線も極力回避している。もっともひつじこに関しては これはそれほど徹底していない。ひつじこは日光大好きだからな。 帽子をかぶらせる程度である。 さらにここ数ヶ月は炭水化物をあまり食べてない。 糖が血管を破壊しないので、基本的に血行がいい。 明らかに体温が変わった。昔のような冷えがない。 当然老化は遅くなる。

エステだの何だのがどれほどの効果を持つにせよ、 食い物がまともである以上の効果があるとは思えない。 まあどっちか言って、その手のものは効果のために選択されているというよりは、 そのようなものを選び、それに金を払う人間であるということに意味があると 考えられているのだろうから、比べる意味もないか。 多くの人にとって、実際に体にいいかどうかよりも、 体にいいとされていることをすることに価値があるらしいことは、 何に金が使われて、どんな商売が繁盛しているかを見れば明らかだ。 別にそれは悪いことじゃない。文化というのはそういうものだろう。 うちの家族がそれに背を向けた生活をすることを邪魔しないでくれれば、 それ以上を望む気はない。

MWCだいぶ難しいなこれ。 法bを決めたとして、最も周期が長くなるようなaを決めるにはどうするか。 法が16ビット以内なら、0xffffから順に試して周期を調べ、長い奴を選ぶ、 ということができなくもない。しかしなんぼなんでもバカバカしい。 まずab-1が素数でbがその原始根であれば、最大周期ab-2が達成される。 しかし、なぜか知らんがbが2羃である場合、それは無理らしい。 ガウスが証明している。だから普通のMWCでは最大周期は実現できない。 とりあえず、a=6、b=10だと周期58の数列ができる。 で、CMWCにした場合、ab+1が素数でbがその原始根であれば、 最大周期abが達成される。2長い。実際a=6、b=10だと周期60になる。 10は61の原始根だが、59の原始根でもある。

さて、bを例えば65536とかにしたとして、aをなんぼにしたらbが 原始根になるのかを簡単に調べる方法はあるのか。 あるいはaを適当に決めた時にbが原始根かどうかは簡単にわかるのか。 数が大きくなってくると容易ではない気がするんだよな。 なんといっても、ab-1やab+1がそもそも64bitにすら収まらない、なんてことになると、 bが原始根であることを確認するには何か工夫がいる。 abが素因数分解できれば簡単、みたいなことっぽいが、何故かわからん。

MWCを理解するのはあきらめた方がいいのかもしれん。 しかしあきらめた瞬間に、パラメータを自分で選ぶ自由は失われる。 NumericalRecipesに書いてあるのから選べ、で終わりだ。 それは面白くない。せめて馬鹿正直な方法でいいから、 16ビット以下のaのリストを作るくらいはできてもいいよなあ。

周期ってどれくらいあればいいんだつまるところ。 ランダム系のゲームといえばトランプだが、52種類52枚だから 状態数はたかだか52^52くらいだよな。過剰に見積って64^52とすれば、 2の300乗くらいか。麻雀は何種類あるのか知らんけど、256くらいであるならば、 過剰に見積って2000乗くらいか。 こういう用途だとCMWCやMTがいるんだろうなあたぶん。 もっとも、初期化でしくじると全パターンを生成することはできなくなるわけで、 そこには配慮がいる。全パターンを生成する可能性を残すためには、 初期化でそれだけのビット数を供給しないといけない。 128乗周期なのに初期化関数に32bitしか与えられなかったりする実装は いくらでもありそうだが、 実際問題128ビットをまんべんなく取り得るような初期値をどこから与えるんだよ、 という問題にはなる。量子ノイズか何かからビットを生成するハードウェアでも 積んでない限り無理そうだ。 そしてそんなものを積んでるなら、乱数生成アルゴリズムに頼らず それを使えばいい気がする。まあデバグできんが。

2013年06月14日

本で紹介する乱数アルゴリズム。線形合同法、MWC、Xorshift。 M系列はコードが若干複雑な上に、大して便利でもないのでやめておく。 CMWCは一回試しておこう。初期値の条件が緩和されるなら価値はある。 0をセットしてもいい乱数は貴重なのだ。 0が来た時に他の値に飛ばしてもかまわないが、 その他の値が1だったりすると、 0と1で違う種にしたつもりで同じ系列が出来る、 みたいな面倒が出る。結局0でもいいことに勝るものはない。

2013年06月13日

カゼひどいなあ。

オタマは機嫌が悪いと口に入れたものを飲みこまずに出すのだが、 それを幼稚園でもやっているらしく、なかなか頭が痛い。 まあしゃーない。プロの手腕に期待するしかないな。 こっちはこっちでできることはするが、 集団生活のために何かを叩き込むような意思も余裕もない。

とりあえず今週末はおむつ取る。 でもわけのわからんこだわりが強いから、いろいろ難しいかもな。 まあそれでもやるだけやってみよう。

オタマが最近食わない。とにかく食わない。 ピスタチオと牛乳くらいしか口にしない。 まあピスタチオを大量に食べてくれるなら 蛋白質とエネルギーが不足することはないのでまだマシなんだが、 大量と言うほどでもない。 単純にひつじこと遊べないストレスで意固地になってるんだろう。 かわいそうだが、しゃーない。 もっと早くからひつじこが手を抜いていれば良かったんだろうが、 それができなかったんだから今更だ。 まして梅雨で外行けない日が多いしな。 買い物は可能な限り連れていくが、 その程度ではおでかけ欲求は満足されないのだろうし、 結局望むのはひつじこが全力で遊んでくれることなのである。 こんな入院一歩手前になるまで体力を擦り減らすような 遊び方をしてりゃ、そりゃ楽しかろうよ。まったく困ったもんだ。

とりあえず食わないことについては基本放っておくしかない。 オタマが食えるものを作るが、無理に食わせようとは思わない。 たぶんかえってマズいことになる。 オタマが比較的食べたがる果物その他を増やしてカロリーを 補填しようなどとも思わない。それは皮膚炎をぶりかえさせることになる。

数々の痛ましい事件が語るように、人は飢えれば食うのである。 腹が減れば食うのだ。実際、オタマ的にはピスタチオを食べているのも 妥協ではあるのだろう。私が二番目にやりたくないことをやるように、 一番食べたくないものよりもマシなものをそこに用意すれば、 ギリギリの量は食べる。 しばらくは仕方ない。

牛乳への依存度を下げて固形物を食べていただきたいわけだが、 とりあえずはトイレトレーニングが先だ。 本来なら春にやっていたはずだったが、ひつじこの体調がそれを許さない。 金土日にとにかくおしっこを漏らして床を濡らしてもらう。 オタマはおまるに座るのが許せないらしいが、折れてもらう他ない。 これ、なんつうか美意識だよな。できるできないの話ではなく、 確固たる意思をもってやらないのである。

育児休暇物だよなあこうなると。最悪それも考える。 どうせ出産前後は半月くらい出社できんだろ。 どんなに遅くても、そのタイミングではおむつにさよならを告げることになる。 さすがに二週間毎日濡らし続ければどうにかなるはずだ。 それでも折れないほどの美意識だとしたら、それはそれですごい。

今日は幼稚園で最後の10分だけ親も一緒にいる日だった。 歌を歌いながらカレーライスを作る手遊び。オタマはまるで乗らない。 カレーライスはうち作らんなあ。そのあたりは正直申しわけないが、 仕方ない。ハンバーグっぽいものはたまに作るんだが、食べないし。 幼稚園で出されるおやつすら、一口食べて出し、それで終わりだったようだ。

正直ああいう子供らしい遊びは私にはどうにもピンと来ないわけで、 オタマにやれよとも言い難い。ひつじこは バカバカしいと思いつつもやってたらしいが、 私が小さい時には全く無視だったそうである。 そんな二人の子だししゃーない。 うちの親は大層気まずかったらしいが、今度は私の番だ。

4bitのM系列の出力は、周期15の間に4ビットが作る15パターンを含んでいる。 これって、分布的にはアウトだよな。 確率的に考えれば、含まれないパターンがいくつかは出るのが自然だからだ。 しかし、例えば5bitのM系列の部分列を取り出せば、4ビットパターンは いくらか抜けが出るはずであり、周期を使い切らない範囲では それなりに統計的性質はいいのだろう。いやでも本当か? ゴリラテストやった感じだと、かなり周期を長くしないと うさんくさい結果になるぞ。でもまあ、「M系列です」 と言えば安心する人もいるんだろうし、それはそれでいいのかもしれんなあ。

経口ブドウ糖負荷試験。ひつじこは50gで1時間後に200を超えていた。 調べてみたら、経口ブドウ糖負荷試験を行う場合、その直前3日間は 毎日150g以上の糖質を食うこと、とある。 普通に医学のハンドブックに書いてあるじゃねえかよ! やっぱりなあ。普段食ってないからインスリンの反応が悪くて 遅れたんだろうと思っていたが、その推測は当たりだ。 医者向けに要点をまとめて手紙書いてひつじこに持たせておく。

医者はじいさんながらもまともなんだが、若い看護婦がアレなんだよなあそこの病院は。

chromeのブックマークがおかしくなった。とっくに消したものが 大量に復活している。何かおかしなことしたかなあ。 流行りのアカウントハックだったら嫌だな。

2013年06月12日

乱数について言えること。

持ってる変数が32bitで32bitづつ使う場合、 絶対に同じ値は連続しない。それは同じ状態だからだ。 乱数の周期がわかれば、次に同じ値が出るのは周期だけ 経った後である、ということは100%言える。 これが言える段階で乱数ではない。 ただし、1bitでも残して使えば、 つまり持ってる変数のうち外に出てくるのが一部であれば、 次が同じ値にならないという保証はなくなるし、 同じ値が次にいつ出てくるかもわからなくなる。 ただし、1bitしか残していなければ、 依然として「周期の中ではあと1回しか出てこない」 と言える。2bit残していれば、3回だ。 そういう回数についての情報は得られてしまう。

いくつかを組にして使う場合で、一度に使う数で周期を割った時に割り切れてしまうと、 例えば(x,y)において、永遠にxとしては出てこない数が出てきてしまう。 32bit個の数がありうる場合、 2次元の空間は64bit個の点を持つが、 出て来る可能性がある点の数が31bit個になってしまう。 しかしそもそも32bit個では到底空間を埋め尽せないわけで、 周期が素数であろうがなかろうが大した差はない。

全ビット使っていれば、ある数の次の数は決まってしまう。 例えば2^32-1の周期で2個づつ使う場合、点の数は最初の一周で31ビット個、 次の一周で31ビット個で、32ビット個しかない。点の数は64個あるので、 ごくわずかな点しか埋められないことになる。 これを回避する方法は、「ある数の次に来る可能性がある数が32ビット個ある」 という状態にすることであって、つまり周期を64bit以上にしなければダメだ ということになる。もし3つづつ使って全部埋め尽したいのであれば、 96ビット以上だ。

ただし、32ビット精度で本当に点を打ちたいのか? ということは考える必要がある。例えばサイコロを振るなら、点は3ビットで足りる。 同時に振る数が2個なのであれば、6ビットあればいい。2から12まで全部出る状態を 作るには、理屈の上では周期が6ビットあれば足りるということになる。 例のゲームがしくじったのは、線形合同法の下位ビットがダメなせいであり、 周期の問題ではない。なお、サイコロを100個振るなら300ビット必要で、 全ての場合がちゃんと出るには32ビット周期の乱数では到底足りないということになる。 どういう使い方をするかが前もってわからん場合には、 周期は十分に長いことが望ましい、ということになる。 2個使うから倍、 という程度でなく、2個使うなら2乗、というくらいに長い方がいい。

逆に、ビットをバラせば周期は長くなるのだろうか? 一回の更新で32bit出てくるアルゴリズムで1ビットづつ使う場合、 32倍の周期を持つものとできるか? これができるなら、 32ビット値を一個取る度にサイコロを10個振っていいということになる。 これはたぶんアルゴリズムによる。一般にはできない。 上位ビットと下位ビットで性質が異なる可能性がある。

いずれにせよ、線形合同法を全ビット使う素直な実装がヤバいことは 線形合同法の中身を探らなくてもわかる。 アルゴリズムの詳細に立ち入るまでもなく、 良い乱数の条件として、周期が素数、 一度に全ビット使わない、の二つは言えるだろう。

このへんが潮時だな。校正に戻ろう。乱数は奥が深すぎる。 乱数に完璧はないこと、標準は疑ってみるべきこと、64bitMWCを とりあえずのデフォルトとして推奨しておくこと、 あとは何か一個でいいから検定が欲しいな。 モンキーテストがいいんだろうが、統計的挙動が説明できんのがなあ。

M系列で行こう。理屈がすっきりしている。 しかしとりあえず自分で理解せんと話にならん。 疑問点。原始多項式って何?なんで累乗と遅れが関係すんの? あと実装。フィボナッチLFSRはわかるが、ガロアがよくわからん。 あともう一つすごく根本的なこととして、XORって結合法則成り立つの?

最後のが一番簡単に確認できる。ベン図を書けばすぐだ。 結合法則は成り立つ。だから、a^b^c^dは、(a^v)^(c^d)にすれば並列化可能になる。

次。原始多項式。 原始多項式は周期が最大になる既約多項式である。 周期というのは何かと言えば、この多項式を=0の方程式とみなした時、 適当な数aを何乗したら元に戻るか、ということだ。 x^4+x+1=0を考える時、aを4乗するとx^4=-x-1で、-1は0と1しかない世界では1なので、 x+1になる。つまりa^4というのはa+1だ。みたいにしていって、aに戻ってくるのが いつかという話になる。a^16は(a+1)^4で、展開して偶数の係数の項を捨てれば、 端しか残らずa^4+1で、これはa+2だからaだ。つまり、aを16乗するとaになるので、 周期は1引いて15ということになる。 よしわかった。そういう多項式があることを認めよう。 で、これとどう関係あんの?

4ビットの01があるとする。これに3乗の項、2乗の項、1乗の項、0乗の項、 が入っているとしよう。4乗の項は方程式から3次以下の和になるので、 ビットはいらない。 ここで1ビット左シフトすることは、全体にxを掛けることに相当する。 ここで、さっきのaの計算をすればいいんだろう。 今とりあえず1が入っているとして0001。xを掛けると、0010。 もう一回掛けると0100。さらにもう一回掛けると、1000。 その次はx^4=x+1なので、0011になる必要がある。 左端から1が抜けていくのであれば、 1次と0次に1を加える、というコードがあるとしよう。 すると0011になる。次は0110、その次が1100。次は左から1が抜けるので1011。 次も同じで0101。次は1010。次が0111。次が1110。そして1111。次は1101で、 次が1001、次が0001。帰ってきた。これで考え方は合ってるようだ。 コードにすれば、

x = (x << 1);
if (x & 16){
   x ^= (1<<1)|(1<<0);
}
x &= 15;

こうだろう。最適化はなんぼでもできるが、理屈はこうだ。 wikipediaのガロアLFSRのコードが近いが、シフトが逆だし、 なんだこのマイナスは?ビット演算でマイナスとかしたくないんだがなあ。 2の補数を保証してないだろC言語は。 if文消すための工夫なんだろうけど。

16ビット化して65535回の呼出後に 1に戻ったので、たぶん合ってるんだろう。 32ビット化すると正しく1になるか確認するのに40億回呼ぶ必要があって 無理だが、それなりにバラついてるしたぶん合ってるんだろう。 周期が長い乱数は正しく動いてるのかを決定的に確認するのがしんどいのが嫌だな。

M系列は統計的に悪いとか言ってるサイトがあるが、 それ、M系列を束ねたGFSRで初期値しくじってるケースと混同してるだろ。

シフトが逆ということは除算してるということだ。 1が抜けてくということは、1=の形に多項式を直してやればいい。 x^4+x+1=0であれば、1=x+x^4で、これをxで除算すれば1+x^3になる。 3次と0次に1足してやればいい。この場合、原始多項式の各項を1次下げて やればいいわけだ。あーサイトによってはそっちが書いてあるわけな。 思うんだが、半分くらいのサイトはこのへん理解してないだろ。

あとは原始多項式はどうやって作るの?という疑問が残る。 とりあえず既約かどうかは総当たりで割り算するプログラムを作ればすぐわかる。 問題は周期が最大かどうかを知る方法だ。

なるほど賢い。要素の数(位数というらしい。英語でorder)は、 2^m-1の約数でしかありえない。例えばm=4で15乗して1になる場合、 もし3,5乗したものが1でないことだけ確認する。 4乗したものが1、とかいうことはない。それだと15乗で1になるわけがないからだ。 唯一ありうるのは1乗した段階でもう1、というケースだけである。

原始多項式の求め方もわかった。あとつながらない所はどこだ? M系列の性質か。mビットまでの全てのパターンが出るとか、 01の比率がおおよそ半々とか、そのへんってどこから導かれる? 調べたらそうなってただけ、ということではないだろう。

4ビットのM系列は周期15で、100010011010111。 明らかに後ろの方ほど1が多い。32bitとかになった時にこういうことは起こらんか? 問題にならない。初期値が最悪で1とかでも、32回シフトすれば4つも1が湧く。 その後10回シフトした所でまた4つ1が湧く。100回も行かないうちに01の 出現率は十分に高くなる。ただし、最初の数十回だけで統計処理すると あきらかにありえない状況になるので、初期値は できるだけ01がそれなりに入ったものがいい。ただしそれでも、 途中0が多かったり1が多かったりする場所は必ず経由する。 途中で出てくれば気にならないだろ?というだけの話にすぎない。

いや、そうでもないぞ。例えば500次とかのM系列を作るとする。 初期値を1にしておけば500ビット0が出る。 こんなことが起こる確率はとてつもなく低いので、 その段階でアウトとみなされかねない。 なるほど周期が凄まじく長ければ、そんなことが1回くらいは起こってもいいはずで、 実際起きる。しかし500乗の周期を使い切ることなどあるはずもなく、 使い切らないということは、使い手にとっての実質的な周期は もっとずっと短いということだ。そのずっと短い周期の中で そんなレアケースが出るのはやっぱり許容できないのである。 そう考えると、やはりほどよく01が混ざった初期値を放りこんでおくべきなのだろう。 いずれは0が500連発する時が来るにしても、 それが気が遠くなるほど乱数を使った後なのであれば納得も行く。

この問題は他の乱数でも起こりうるか。 例えば4096bitのMWCで、いきなり32bitの0が128連発することはありうるか。 初期値次第ではありうるだろう。というか、ありえなかったとしたら その周期は飾り物だ。そんなことも起こるくらい長い周期なのである。 ただ、どうその初期値を設定すればそうなるかが とてつもなくわかりにくいので、事実上そんな初期値を設定することはできない。 MWCの場合最初が1でもあっという間に巨大な数になってしまう。 そのへんがビット演算でなく普通の計算を使うことの強みだ。 ということは、ビット演算系の他のアルゴリズムでは 同じことが起きやすい、ということになる。 Xorshiftは起きやすそうだ。xorは何もない所から1を作ることはできない演算だ。 だから1が1個しかなければ、しばらくは1があまりない状態が続くだろう。

ということは、M系列の欠点として初期値を設定しそこねると、 実際上あるいは直感上変な乱数列を出しやすい、ということがあることになる。 線形合同法やMWCは乗数がデカければ初期値が1でも問題ないし、 線形合同法の場合0すら許される。MWCは0はマズイが、CMWCにすれば0も オーケーになる。初期化で失敗できない、 という意味ではCMWCは最強かもしれない。 線形合同法もその意味ではいいが、「下位ビット使うな」は無茶過ぎる要求だ。 どんなにバカな使い方をしてもそうひどいことにならないアルゴリズム、 というのは意味がある。

というわけで、MTのコードを見てみる。長い。しかも私じゃ読めないコード密度。 論文読んでわからないのはまあいいとしよう。 整数論なんて私の手に負えるものじゃない。 それはXorshiftやMWCでも同じだ。 しかしあっちはコードが短い。理屈がわからなくても3行で書けるのであれば 書き写すのもインターフェイスを好みに合うように直すのもやりやすい。 理屈も完全には無理でもなんとなくは味わえる。 しかしこう長くなるともう無理だ。 だいたい、こいつをC++のクラスにしようと思うと、 嫌でも移植はせねばならない。クラスにしないと乱数のインスタンスを 複数作れないわけで、それでは使い勝手が悪すぎるのである。 グローバルに置いてあればマルチスレッド安全性を考えねばならなくなる。 調べてみれば移植した人はいて、見てみるとヘッダ実装化されているので このまま使えるのだが、やっぱりコードが長い。気にせずそのまま 使えばいいんだろうが、それが不安になる私は今時の開発スタイルには向いてない。

M系列で1bitづつしか吐けないより、MWCで16bitづつ作って1bitしか使わない 方が速いんだが、なんだろうなこの悲しい事実は。 M系列はハードウェア実装するにはいいんだろうが、 ソフトウェア実装するとせっかくの並列性が殺されてしまう上に、 素直に書けば分岐が入るので余計に遅くなる。

GFSRは初期値をしくじって例えば全部同じビットにしたりすると、 永遠に同じビットになる。単なる並列M系列だからだ。それに 適当に混ぜてやらないとせっかくの状態空間の大きさが周期に反映されない。 それをやったのがMTだが、あのコードを見るに、 その路線で改良するのはしんどいということだろう。 3行でGFSRの改良ができるとは思えない。

Numerical Recipesによれば、乱数アルゴリズムは混ぜて使え、とのことだ。 しかし、根拠が書かれていない。どう混ぜるといいかは書いてあるが、 それが何故かはあまり書かれていない。 ところでこの本はマーサグリア先生びいきなんだろうか。 「必要でもないのにややこしい方法を使うな」というのは MTを意識しているとしか思えない。 別にMTは遅くないわけで、均等分布が保証されているなら それに越したことはないだろう。本気な用途ならMTがいいと私も思う。 ただ、大抵の用途は本気ではない、というだけのことだ。 ボードゲームでサイコロを振る程度のことなら 下位ビットがまともで周期が30乗あれば十分すぎる。

乗算の上半分をタダで取れる方法があればMWCがさらに高速になるのだがな。 アセンブラで書けという話か。

ゴリラテストを実装してみたが、M系列は32bitだと線形合同法の最上位ビットにも 劣る結果になる。64bitまで上げても良かったり悪かったりする。 そして、線形合同法の最上位ビットのランダムさ はなかなかのものだということを知った。 ただ、それ以外のビットは下へ行くほどダメになっていく。

勉強終わり。あとは文章と実験と実装の問題。

2013年06月11日

「生き方」の値段、という本を読んでいる。

著作権の類が社会に有益か有害かは場合によるし、 尺度を決めない限り全体としてどうかは言えないし、 尺度の決め方は無数にある。だから何も言えない。 ただ、情報の値段は下がる方向にしか行かないだろう、 ということは言える。情報に高い値段をつけようとする試みは ますます難しくなる。 ただそれは全体的な傾向としての話であって、 コピー防止技術やら啓蒙活動やらが局所的に状況を反転させることはありうるし、 実際ある。結局世界はいろいろだ。

ランダムであればあるパターンが出る確率は求まる。 その確率通りに出ているかどうかをチェックするのはわかりやすいテストだ。 Nビットまでのテストは、そのNビットが十分な数だけ 出るだけの回数やらないといけないので限度はあるが、 16ビットくらいまでならやれる。

Xorshiftの欠点は、1個前の値のビットパターンがなんぼか残ることだ。 あと、3つの値とシフトの方向によってはひどいことになるらしい。 つまるところ、この手法が保証しているのは周期だけなのだ。

MWCも同様に、周期はパラメータを間違わなければ保証される。 パラメータを間違えやすい欠点はCMWCにすれば消えるっぽい。 しかし、これが乱数として都合がいいかどうかは必ずしもわからない。

2013年06月10日

オタマが幼稚園を嫌がる。そして私の風邪は激しく悪化。 そしてひつじこも風邪で咳が出て腹に良くない状態。 これかなりピンチだな。さて幼稚園に行くぞ。

2013年06月09日

夢見が崎動物公園に自転車で行ってきた。 1時間15分くらいで行ける。 ひつじこを休ませるための時間稼ぎだったので、 時間が無駄にかかるデメリットはこの際問題ではない。

問題は、やっぱりオタマが大して動物に興味がないこと。 サルとペンギンは良く見たが、30分といなかったことからも 興味の程が知れるというものだ。 そして何より、風邪が猛烈に悪化したことだ。 頭痛がひどい。日射病とかじゃないと思うんだがなあ。 30度しかなかったし、水は飲んだし、帽子もかぶっていた。 帰って熱をはかったら37.5。そう悪いわけでもないが、良くない。

行ける距離であることはわかったが、今年はもう無理だな。 これ以上暑くなると自転車で時間稼ぎは無理だ。 電車を使わざるを得ない。しかし、電車の場合は車中で オタマを楽しませねば間がもたないので、そこの難易度が高いのである。

やっぱり川崎ルフロンの遊び場だな。飽きてきたらキドキドとやらを試してみよう。 児童館にもあんな感じにクッション敷いた場所があればいいのだが、 そんなものはないし、児童館はおおよそ小学生まみれでどうにもならんのである。

ガルガンティアを10まで見た。アニメの制約が惜しい。 丁寧に語るには時間がなさすぎる。 何かにつけて、時間がないということが辛い。 ゲーム、というか文章媒体が優れているのは、その量だ。 映像はコストがかかりすぎる。

それにしても頭痛ひどいな...乱数の検定を勉強しなおさんとアカンのだが...

すごく規則的な乱数アルゴリズムでも、 用途によっては問題なかったりする。要するに、ランダムさがその用途のために 本当に必要なのか?ということは場合によるし、 そもそもランダムさって何だよ?という話にもなる。 ランダムであれば成り立つであろう条件は山ほどあるが、 その全てが全ての用途に必要なわけではない。

乱数の検定に関する議論はKnuthを読むくらいしかなさそうだ。 私が欲しいのは、ビット単位のテストで線形合同法と、 素朴な数列 (010101...とか、00.01.10.11...とか000.001.010.011.100.101.110.111とか)が 落ちるようなテストだ。 それが通常の用途では必要十分なテストとなる。 ポーカーテストは明らかに不十分で、 先の素朴な数列を4ビットあるいは8ビットに拡張すれば通ってしまう。 01のカウントも不十分だ。ポーカーテストをもっとビット数を増してやればいいのだが、 あまりビット数を増やしてくるとカウントするのが困難になる。 マーサグリア先生は26ビット使うゴリラテストというのを提唱したらしいが、 詳細がわからんな。しかし「出るはずのパターンがちゃんとありそうな数だけ出るか?」 というのが一番強力なテストだろうという気はしなくもない。 連検定はその手抜き版にすぎん。

わずかな乱数列ではわからないこともあるが、 長い乱数列ではわからないこともある。 01234..と増えていってどこかでループする単純な数列の場合、 ループを十分繰り返すくらいの量があれば偏りは検出できなくなるのだ。 そのへん、学術的にはどうやって扱ってるんだ?

ランダムであればこうだろう、というようなことはいくらでも見つかる。 例えば、圧縮しても減らないだろうし、フーリエ変換すれば各周波数が 均等に出るだろう。しかし、「こうであればランダムである」 という十分条件ではない。それは結局ランダムさの定義は人間の主観なしでは 決まらないからだ。どこまで行っても計算で作っているわけで、 規則性がなくなるということは絶対にない。 見抜けなければいい、というだけのことだが、 それを言うなら各種アルゴリズムを走らせて同じ数列が出来たらアウト、 というテストを作れば、そこで試すアルゴリズムはアウトということになる。 これはどう考えればいいんだろうか。

Knuthを読んだ。会社の本棚にあるのを見つけたのだ。 しかしわからん。さすが学者が書くものは違う。 さて、私にとって、これを理解することは望ましいことである。 わからんよりわかる方がいい。何だってそうだ。 そもそも、これをわからん人間が乱数を語るのは犯罪と言っていい。 しかしそれはそれとして、これを理解した私がこの内容を 誰かにかみくだいて説明することに意味があるかと言えば、ない。 むしろ有害ですらある。私は自分が理解したことは全部説明したくなる性分だ。 それは今書いているテトリス本にも反映されていて、 それが一部有害な結果をもたらしている。

乱数を使う立場から言えば、十分だと専門家が言う方法を使えばそれで良い。 XorShiftかMWCかが一般的な用途では第一選択になるだろうし、 メモリを食ってもかまわないならメルセンヌツイスターがいいらしい。 もう少し用心深いのであれば、適当な検定プログラムを持ってきて、 自分が書いたものがそれを通るかをチェックすればいい。 いくつかの検定プログラムがタダ で手に入るし、web上には検定についての解説記事もある。 それを見て自分で書いてもいい。 しかし、いずれにしても、理屈は全くわからないままに終わる。

乱数に限らないが、「使えりゃいい」と「理解したい」の間には無限の段階が存在する。 もし理解することのコストがゼロなのであれば、理解することが正しい。 理解は使うだけであってもプラスになるからだ。 しかし、問題は理解することのコストがゼロではないことである。 だから私がすべきことは、私が書くような本を読む人が払う気のあるコストの範囲で、 最も高い理解が得られる説明を提供することだ。 これは乱数に限らずあらゆることについてそうである。 今更テトリスの作り方を説明するのも、mallocの作り方を説明するのも、同じことだ。

さて、乱数に関してはどのようにすべきか。 まず答えが決まっている。赤黒木みたいなもんで、 「こうすれば実用になる」と完全にわかっている。 だが、これは理解することも、発明することも困難だ。不可能といっていい。 赤黒木はまだ発明の過程を追体験できるが、 XorShiftやMWCはかなりの数学的前提を踏まない限り、 「あーなるほどそりゃそうだ。そう考えればこうするわな」とはならない。 2003年まで発明されなかったようなアルゴリズムを、 一般人があっさり理解することができるはずがない。 乱数に関しては2000年あたりを境に世界が一変しており、 このKnuthの本は実用の意味では完全に時代遅れになっている。 教科書としてはいいが、「使える実装ください」という人にとっては完全に役立たずだ。 numerical recipesの3版を読むべきである。

まず、「こんなだったらうれしいな」とい性質についてはある程度説明ができる。 「01はある程度均等でしょ」 「00100111とかいうパターンが出てくる回数はこれくらいだよね」 といった「ランダムなのであればこうだろ」という性質はいくらでもある。 そのうち直感的であり、かつコードが書きやすく、 さらにダメな乱数をはじく力が強いものに 絞って導入する。テスト駆動は私の本の根底に置くべき思想であり、 乱数の手法を云々する前に、これを通れば乱数だよ、 というテストを用意するのはストーリー上も良い。

そこがきちんとしていれば、乱数を生成する手法については天下りでもかまわない。 「たまたまこうしてみたら乱数になった」という説明でもかまわない。 それはそういうものだ。 赤黒木のように発明までのストーリーをでっちあげられるような代物ではない。 線形合同法を思いつくに至るストーリーなどそうそう説明できるものではないし、 そのパラメータの選び方をまともに説明すれば、日が暮れる。 ましてそれを面白くすることはあまりにも困難だし、 どんなに説明しても、結局はXorShiftなりMWCなりMTなりを使うのである。

というわけで、主眼は検定側にある。 しかし、普通に検定の説明をするとカイ二乗検定になる。 ところが、こいつがまた天下りもいいところである。 そもそもカイ二乗分布の表を使った段階で、完全に天下りになる。 かといってカイ二乗分布の計算式を出せば、 もうその段階でプログラミング本から逸脱する。 ガンマ関数見たくないだろ普通に考えて。 さらに言えば、二項分布の段階で計算関数を作るのがかなり嫌な気分になるし、 正規分布への近似を紹介するとなれば、これも天下りである。 この程度なら納得の行く説明をする自信はあるが、 ちょっと想像しただけでも20ページに収まらない。 単純に「これ確率低いよね普通に考えて」 というところまででうまく済ませられればそれでいいんだろう。

無理な気もしてきたが、落とし所はあるはずなのだ。 y=x+1(mod 2^32)という何一つランダムでない 数列が、どうランダムでないのか、何に照らしてランダムでないのか、 といったことを説明することはできるし、 これを例えばy=3x+1にするだけで 桁さえデカければ結構ランダムめいてくることを実感することもできる。 問題はそれが特定の応用において欠点を露呈するかしないかだけであって、 人間の主観はどうでもいい。 そのことくらいは伝えられる気がする。

Xorshiftは、32個の01からなる32次元ベクタを、 32x32行列で線形変換していくアルゴリズムだ。 この段階では全ビットが平等なので、 線形合同法のような嫌なことが生じないことが納得しやすい。 加算や乗算といったビットを束ねて行う演算に頼ると、 ビット単位で見た時には嫌なことが起こりやすそうである。 さて問題はどのような行列を使えば周期を最大化できるかであり、 また、その行列ベクタ積が結果的にどういう演算になるかだ。 後者は本当に馬鹿正直に32x32行列を掛ける場合、 32並列乗算32回と32並列加算31回になる。 ここで32並列乗算とは何かと言えばandであり、 32並列加算とはxorである。だから、32回のandと31回のxorを使えば、 そのような行列を乗算することができる。 だがこれでは遅すぎるわけで、何か工夫がいるわけだ。

ここで、ある行列がI+Aなる形で表せるとする。Iは単位行列で、 Aは単位行列の1を左になん個かずらしたものだ。 各行に2個1があって、1と1の距離が同じになるような 綺麗な行列である。これを乗算するのはベクトルのshiftとxorだけで事足りる。 次に、I+Bなる行列で、Bは単位行列の1を下に何個かずらしたものとする。 これも各行各列に2個1があり、1と1の距離は同じだ。 これも同じくshiftとxorだけで事足りる。 幸いにして、こういう行列を3個掛けた行列で周期を最大化することができる、 ということがわかっている。 周期を最大化できる行列は、2^32-1回乗算するまで元に戻らないような行列であり、 これは位数が2^32-1である、ということになる。 どうすれば位数が最大になるのか、みたいなことはわからんが、 ともかくシフトするビット数を3つ用意して、 左右左とシフトしつつそいつらをxorすると、 2^32-1の周期でいろんなベクトルが出てくる、ということになるわけだ。 その3つのシフトをどう選ぶか、 というところはブラックボックスでもいいと割り切れば、理屈は実にそれっぽい。

ただし、これらのビットをバラバラに使えばおそらくダメだろう。 これはあくまで32bitを束ねた手法であり、 毎度1bitづつ使うとかであれば、生成する度に1bitづつ抜いて使うべきである。 1回生成して32回ビットをもらう、 みたいなマネをするとおそらく検定を通らない。もし通るなら最高だが たぶんない。普通にM系列使え、という話になる。 Xorshiftは並列化M系列の賢い奴、と考えればいいんだろう。

長周期ならMWCの方がやりやすいようだが、なんでだろ。 どんなアルゴリズムであれ、周期Nを実現するならlogNビット保持せねばならんわけで、 そこに変わりはないんじゃないかと思うのだが。 なお、長周期欲しかったらMT使えよ、という話になるんだろうが、 MWCは1行で書けて書き間違えにくい、という利点があるので、 品質を気にしないなら私はそっちを推したい。 「人がソースを見ず、メンテは世界でも一流の人間がやる」という保証があれば、 アルゴリズムはどんなに難しくてもいいから性能がいい方がいい。 windowsやVC、gccの中身ならそれが言える。 ごくわずかな性能向上でも使う人の数が莫大だから 元が取れる。かつ保守するのは一流であることが保証されるはずだ。たぶん。 しかし、うちらゲーム屋その他が書くコードにそれは当てはまらない。 だから十分な性能を持つ範囲で最も実装およびメンテコストが安い方法を使う、 というのが常道になる。性能が高くても書くのが難しかったり、 人が読めない手法は採用すべきでない。 よくわからんものはライブラリをもらってきて使うべきで、 下手に自分で実装しちゃダメだと私は思う。 そこを理解する努力をする気もないんだったら買えばいいんだよ。 つまりその要素に付加価値を見出してない、ってことなんだから。 ただ、「十分な性能」の定義が困難なケースもあるので一概に そうとも言えないんだが。

みたいなことを思ってるのは少数派な気もするな。 中身わからんでも論文に付属のコードもってきて入れて動けばそれでいいじゃん、 という人はなんぼでもいる。 それでうまく行けばそれでもいいと思うし、 実際それが問題になるほどコードを保守し続けることはない。 まあ私は少数派でいいよ。なんで動いてんのかわからないことの上に、 さらになんで動いてんのかわからないことを積み重ねていく あの不安感は私には耐え難い。そういうことは、それが不安でない人に任せよう。

M系列を32並列、という手もあるんだろうが、 初期値しくじったら終わりだよなあ?なにせ独立だから。 しかも初期値が32x32ビット必要になる(んだよな?)。この使い勝手の悪さはひどい。 しかしそこをがんばって改良していくとMTになるというのだから、おもろいものだ。

2013年06月07日

朝公園でブランコ。オタマに「また幼稚園行く?」と聞いてみたら、 行くと答えた。つまらなかったわけではないんだな。 「とおちゃん、おやつ買いに行った」とか 意味のわからないことを言っていたが、 おやつを食べている時に私がいないことを思い出して泣いたことが そんなふうに表現されているんだろう。

さっさと7章片づけたいな。8章の乱数が楽しみすぎる。 乱数を私は全然理解してない。 ランダムって何だよ。

為替の揺り返しが来ている。都合がいい。 職が安定していて、景気で給料が変動する要素が少ない人にとって、 円安はマイナスでしかない。ただし、ゲーム屋のように ほとんど純粋に輸出産業となると円高のダメージは半端ではなく、 長期的には個人にとってもそこそこ円安である方がありがたい。

プレゼン能力か。それって、とりあえずは相手の立場に立って考えろ、 ってことなんだろうな。 コミュニケーションを成立させるのは受け取る側だ。 そして、受け取られるような形でやらんと受け取られない。 とりあえず、声の大きさ、情報量、用語、といったあたりは 最低限気をつけたいものである。

悪意を持って無視しているのではなく、単に何も考えていないだけ、 というのはある意味救いだが、ある意味なお悪い。

2013年06月06日

日が変わってから、というか朝4時になってから書き始めるというかなり危険な状態。

malloc本6章までそれなりに書いた。コードを相当整理したので、 7章は滞りなく終われるだろう。そして本題の8章を楽しんで書いたら、 テトリス本に戻る。校正が来ている。

校正対応を始めてしまった。編集さんから来たものを9割くらい片づけた。 まだ2章までだが。一部文章の練り直しがいるなあ。 あと図をいじるのと、一部表が狂ってるっぽいので直さんといかん。

ああ5時半。でも今日はオタマ風邪だし外遊びには行かんだろう。 幼稚園も休みだろうし。

早くCG本に入らんとマズいか。malloc本一旦止めた方がいいか? でもこれそんなにかからんもんなあ。やっぱりさっさと完成させる方向で行くか。 まあ何にしてもテトリス本をさっさと出さねばならん。

オタマ幼稚園。別れる時はあっさりだったが、 迎えに行ったら泣いてた。まあ体調良くないしなあ。

風邪。オタマのが来たようだ。睡眠時間のせいかきつい。

2013年06月05日

オタマが初の本格的な発熱。38.5。頭痛、咳、鼻水はなさそうだが、 とにかくダルそう。幼稚園がマズかったのか。 でも家にいたらいたで退屈してただろうし、なんとも言い難い。 とにかく明日一日で回復しなければ木曜の幼稚園は休みだろう。

2013年06月04日

オタマ幼稚園。いや、これはないわ。やることなすこと雑すぎ。 既成教材を事前のタイムスケジュール通りに消化するだけ。 子供の反応を何一つ見ていない。

でも、幼稚園なんてこんなもんだろ?という印象が元からあったので、 あまり驚かない。昨日行った方はもっとちゃんと高品質なのだが、 しかしオタマに合わない。そんな理想化された幼児じゃないからな、オタマは。 おかあさんといっしょとかで元気にノリノリになる幼児だったら 話が早かったんだろうが、その時期は2歳前半で終わってしまっている。

幼稚園なんて親が楽をするためのものだ、という確信がますます深まった。 オタマのために、なんて言う気にはまったくなれない。 なるほど友達は重要かもしれんが、そのために、つまらん授業を我慢させ、 言われた通りに絵を描かせて感性を殺すのは割に合わない。 小学校に上がれば避け得ないわけで、 早くからそういう苦行に慣れさせる方がいいという考えもあるかもしれんが、 いや別にいいよそんなの。

さて六郷はどうなんだろうなあ。なにせいきなり親子分離だから 何をやってるのかわからない。 とりあえず、いきなり別れても2時間後に泣かずに帰ってくるんだから まともなんじゃないかという気はするし、見える範囲では 配慮は行き届いている。先生はギャル気味だが、組織として働く体制が 出来ている印象があり、仮に一人一人の資質が多少アレでも 全体として回るように工夫されているように見える。 とりあえずは六郷メインで考えるとしようか。遠いのが問題だが。

校正来たー。やらねば。しかし、malloc本がすごくいい所なので悩ましいな... ちょっと進めてしまうか...校正対応はそんなにかからんだろうし... やっぱりmalloc本を7章まではそれなりにやってしまおう。 頭の切り替えオーバーヘッドが惜しい。

2013年06月03日

CGというものを全体として理解できている気がしない。 2005年に初めてシェーダなるものに触れて以来、 私はずっとそう思ってきた。 いいかげんそれを変えるべき時だろう。 五反田さんや川瀬さんの話を聞いてちゃんと理解できるようにならんとダメだ。 つまり何を狙ってどういう計算をしていて、 それを現在の制約条件で行うためにどう構成し、近似しているのか、 ということを、全体として理解しないといけない。 でないとシャドウマップの手法を一つづつ試してみては 遅い速い綺麗汚ないを言う、みたいなことを えんえん繰り返すだけで個別の知識しか身につかない。 いや、そんなものは知識とすら言えん。情報にすぎん。 だから容易に忘れるし、動いた段階で先へ行くので 理解していないことも多い。 これを根本的に打破すべきだ。

まず、よほど理屈が単純でない限り、 いきなりGPUで実装しちゃダメだ。GPUのプログラミングは、 言うならば手で触れるものではない。 シャドウマップなんて一旦CPUで書いてみた方がいい。 そうすればいろいろいじるのも簡単だし、新しい手法が出た時にも CPUコードを書き換えて試すのは簡単だ。 そして、それが何をどう近似するものなのかもはっきりする。 幸いにして、今はCPUがだいぶ速い。コア数も多いから、 わずかな手間でコア数分は高速化する。 また、スレッドでの分散と大差ない手間でマシン分散することも それほど面倒ではない。 レイトレだろうがラスタライズだろうが、 処理の大半はピクセル数に比例するわけで、 解像度を落とせば速度は上がるのだ。

malloc本、7章でコードが複雑になりすぎたので一回最初から見直し。 もっと早くから整理しながら書かないと。 ここまで来てから急に整理するのは変だし、7章が長くなりすぎる。 しかし、二分ヒープがたまらなく面白い。 条件を緩くすれば速くなる、というのは方向としてはそうだが、 なかなか実感できることはない。 ということは、「先頭から10個以内に最大の要素がある」 というようなデータ構造をもし作れたとしたら、 二分ヒープよりも速い可能性があるのだろうか。

haswellが出たが、なんか前評判ほどではなさそう。

lenovoの修理の人から、18万かかるので、15万までは保証でタダだが差額3万よろ、 と言われた。どうもゲロがついた部品を全部取り換える気らしい。 ゲロついてても動く部品はほっといていいから、 キーボードだけ換えてよと言ったが、それはできないらしく そのまま返してもらうことになった。 ゲロがついたままの部品を放置しておくと後々マズい、という判断なのだろう。 しかし3万は金かかりすぎ。 と思っていると、もう一度かかってきて、 「液晶の交換をしなければ15万に収まるが、どうか」と言われたので、 「じゃあよろしく」となった。 正直そんな金かかる修理をしてもらうのは申しわけない。 キーボードだけ送ってもらえればそれでよかったんだがなあ。 あと半年も保てば新しい奴に買い替えていると思うし。

家電PCに関しては今後タッチパネルが主になるなら、 lenovoでなくてもいいかもしれない。トラックポイントが欲しければ、 USBトラックポイントキーボードを差せばいいのだし。 そうするとハナッからキーボードなしの機種でいい気がする。

過労死の死因を見た感じ、た ぶん大丈夫。というか、そこまでしんどい状態じゃないって。 だいたいしんどくなったら寝てるし。 糖尿、高血圧、加齢、肥満、血液検査でわかるような異常、 がいずれもない。脳出血も近親者に出ていないので、たぶんない。 なにかひつじこ以外にも心配をかけている気がほのかにしたので、念のため。 というか、早く完成して?出版されないと、 そのことのストレスの方が体に悪い。

というか、そろそろ献血に行きたいのだが、 ひつじこがもう少し回復しないことには外出のついでに30分、 ということすら辛い。オタマを待たせることはできんし。 夜中やってるところがあればいいのにと思うが、 まあ無茶な話か。なお、血圧は105くらいだった。たぶん問題ない。 どれくらいからが低すぎるのかもわからないのだが。 他に家でできる健康チェックないかな。 体重は61-63の範囲から全く外れない。体脂肪率も10-13%で推移している。

ダージリンの方がうまいな。なお、紅茶はカルディで売られているjanatのもの ばかり買っている。安い割にうまい。ただ、100個入りなので、 最後の方を飲む時には香りが飛んでしまっているのが残念だ。 タッパーなり缶なりに入れればいいんだが、面倒なのである。

いかん。もう3時か。案外手間取ってるな5章の書き換え。どさくさに紛れて二分検索の 説明を入れたので長くなった。二分検索は素晴らしく基本なので、 どこかには入れたかったのだ。丁度いい場所があった。 明日中に5章と6章くらいは終わらせて、あわよくば7章も書き換えよう。 それで綺麗なコードになっていい具合に整備できれば、 後がだいぶ楽になる。

コールスタック表示を自作しとくか。 適当な関数でグローバルのスタックにファイル名と行番号を入れて、 assertこいた時にそれをズラズラっと表示するようにする。 適当なクラス作って、コンストラクタでスタックにプッシュ、 デストラクタでポップするようにしておけば、ポップ側は自動になるから記述量が減る。 で、コンストラクタを適当なマクロにしときゃいいのか。 これないとしんどすぎる。 どこで止まったかを調べるだけで分単位の時間がかかるからな。 デバッガあると便利だなあ。 しかし正直vcxprojが何十もできるあの地獄はもうやりたくない。 gdbは使い方忘れたし、あれに頼る必要があるほどややこしいものを作っちゃダメだ。 というわけで、coutしか出ない前提でがんばる。

いかん4時だ。帰ろう。5章はスタック、生メモリ書き込み、メモリブロックへの 管理情報埋め込み、番兵、と盛りだくさんだ。6章は6章で双方向線形リスト、 空き領域を別リストにつなぐ工夫、デバッグ支援関数の準備、 とやはりそれなりにしんどい。

それにしても穀潰し感がヤバいな。本当、早く本が出ないとヤバい。 もちろん、出てまるで売れず評判も悪ければ、それこそゲームオーバーなのだが、 良くても悪くても結果は早くわかった方がいい。

2013年06月01日

この店、オーストラリア人が見たら怒るだろ...ひつじこが 今度友達と食いに行く店がひどくおかしい。 オーストラリア料理と言ってるが、どこがそうなのか全くわからない。 おしゃれさで売ってるんだろうが、この盛り付けはおしゃれなのか? おしゃれ風?

編集さんから校正が来ないと何も始まらんなあ.. 一人で何冊も面倒見てるんだろうし、仕方ないんだろうが。 まあいいや。他のを進めてさっさと社内公開してしまえ。 つうか、部数が決まるまで正式な契約に至らない、 というシステムが不思議だ。もちろん部数が決まるのは、 モノが完成してからである。 つまり、契約に至る前に書く側はほぼ全コストを支払っているわけだ。

ひつじこは動かないのが仕事。強いて言えば、空いた時間は 全て呼吸法につっこむこと。というわけで明日の幼稚園は私が行くので、 午前中は休み。もし回復が不十分で本当に手術するとなれば、 明日は休みだな。まあ寝静まった後に出社するんだが。

今日は出社したが3時間で終わり。疲労が溜まりすぎて無理。 何日も3時間睡眠(+寝落ち分)が続いている。 昨日今日とオタマの相手でかなり消耗しているし。 なにせ今日は大森のイトーヨーカドーまで行ったしな。

疲れてもコードは書けるが、デバグができん。なにせcoutしかないからな。 今回はデバッガを使ったら負けというルールでやっている。 そうすることで、デバッガでなまったデバグスキルを回復させる。 「とりあえずステップ実行しながら眺めるか」 なんていうヌルいことをやっていると頭が腐る。 きちんと思考によって最短でバグを発見する経路を設計しながらやらんといかん。 また、デバッガがないとデバグできないような コードはこの本には似つかわしくない。 私がそれくらいのハンデを払わないと想定する読者が読めるものにならん。 おかげで、いつもなら気にせず進めるくらいの汚なさでも 耐えられず、かなり可読性を気にしたコードを書かざるを得なくなっている。

バイト単位で埋めるとdata.next = prevみたいな書き方ができず 全部setNext(data,prev)みたいな関数になる。数学の発展を促したのは記法の進化だ、 という話を聞くが、まったくその通りかもしれん。 同じアルゴリズムでもメンバ変数を介した書き方をしないだけで ずいぶんとわかりにくくなる。 これは早めにアラインメント制約を入れて構造体にキャストして書くように した方がいいのかもしれんなあと思うが、 そうするとintやポインタのサイズが問題になる。 「4バイトの整数を自力で埋める」とした方が説明は簡単だし、移植性も高いのだ。 読者んところのintが何ビットかなんてわからんからなあ。

早産防止の手術をしても、無理をすれば体調は悪くなるのである。 体調が悪くなっても早産しない、というのは、 体調が悪くなることが避けられず避けるつもりもないならいいが、 私は体調が悪くなるのを見過す気はない。 体調が悪くなれば当然寝ていてもらう。 その意味で、「無理しても大丈夫なように手術」というのは無意味だ。 「しないといけないレベルではない」という判定であれば、 しないで帰ってくる方が私はいい。 9月まで何もしないで寝てろと。つうか、web見てるヒマがあったら 全力で呼吸法をやること。ところどころ血行悪い。そんなの呼吸ですぐ治る。 一日3時間くらいは無心でやるべきだ。それくらいの時間は一人 でいられるようにする。一日に立っていいのは5回まで、 と決めるくらいの勢いで寝転がってほしい。 皿洗いや片づけ禁止。できれば料理も禁止したいが、 つわりで私が作ったものが食えない気分の時があるから、これはある程度は仕方ない。


もどる