Entries from 2009-09-01 to 1 month

今日の復習

10割。 Rasterize Texturing pipeline ACID Set and Aggregate ARIES Transparency 僕のアプリ構造ない Writing Solid code

C++ の Object::isNumber 呼べた - JIT

Object クラスのメンバ関数呼べた。 うまく動くはずなのになんで動かないんだろう?とずっと悩んでいた件も解決。 isNumber の call 後に第一引数 VM*(rdi) を restore し忘れていた。正確には rdi を参照している場合は restore が必要な事は理解していたの…

今日の復習

OOSC モジュール性 10割 フレネル反射 10割 Estimate cost of plans 10割 writing solid code 2割

今日の復習

僕のアプリは API 呼んでいるだけ 10割 タスクの実行 Executer 10割

行き詰まった

JIT のコードで一部どうしても動かないところがある。 rdi につっこんだ this が正しいはずなのに SEGV 。うーむ。なんだこれ。

C++ メンバ関数のポインタをアドレスとして取得

C++ のメンバ関数は関数ポインタをとる事は出来てもアドレスは無理。とはいえ JIT で必要なので以下の方法でとる事に。 実体は this が第一引数のマングリングされた関数だから呼べるのは当たり前だけど合法かが微妙。 const Object t = Object::makeFixnum(…

今日の復習

10割 Distribured Database Aggregates 変更が永遠に終わらない

分岐が動くようになった - JIT実験中

(let* ([label (gensym)] [asm (assemble `((movq rax ,(vm-make-fixnum 2)) (movq rbx ,(vm-make-fixnum 2)) (cmpq rax rbx) (je ,label) (movq rax ,(vm-make-fixnum 3)) (label ,label) (retq)))] [proc (u8-list->c-procedure asm)]) (test-true (proced…

続 ES1370問題 解決

QEMU で virtio-net を有効にすると、なぜか ES1370(サウンドカード)の音質が悪くなる現象の原因がやっと分かった。 結論としては Mona の ES1370 ドライバの初期化処理が良くなかったようだ。 元のコードでは以下のように、コントロールレジスタからステ…

今日の復習

Smart UI Antipattern Simple さの分け前 正しいプログラムを書く 全て10割。

オブジェクト指向入門 第2版 原則・コンセプトを読んだ

オブジェクト指向入門 第2版 原則・コンセプト(通称 OOSC)読み終わった。長かった。 読んだ動機は単純で「オブジェクト指向を正しく理解したい」から。ちょうど同じ時期に読んでいたDomain-Driven Designでも、モデリングのツールとしてのオブジェクト指向…

shiro 流

map-accum と match-lambda* の組み合わせとか人生で一度も経験ない。 jmp label のために addr という seed を持ち回って評価していくのがきれいだ。 こういう職人芸は盗まねば。 ;; asm :: [Insn] -> [Byte] (define (asm insns) ;; first pass. create [(…

今日の復習

Updating distributed data 10割 Join 10割 simple さの分け前 4割

マクロアセンブラっぽくなってきた

VM Instruction の REFER_LOCAL_PUSH_CONSTANT を定義。 macro-xxx はヘルパー的なマクロ。このマクロのおかげで細かいミスが減らせるはず。 VM Instruction の定義は quasiquote でやってるけど、これが正しいのかは、もう少し進んでみないと分からない。 …

今日の復習

正しいプログラムを書く 0割 以下10割。 B+ Tree in practice Services ISAM 封筒の裏計算 小さな箱 オブジェクトのライフサイクル

Erlang Skip Graph デバッグ中

Skip Graph へ (key value) を並列 insert をしたときに gen_server がデッドロックする問題に悩まされる。 insert は handle_call 経由で insert_op_call が担当する。insert 自体は自分自身のデータを変更(左右のノードの更新とか)が発生する。つまり St…

SRFI-103, 104

提案者は R6RS 用の SRFI を開発している人ですね。 103: Library Files http://srfi.schemers.org/srfi-103/ 104: Library Files Utilitie http://srfi.schemers.org/srfi-104/

JIT の関数呼び出しどうしよう

obj.isNumber などインスタンス関数のポインタを JIT コンパイラ側に渡さないと。 C だったら楽なんだけど。 追記 よく考えれば特に変わらないか。

今日の復習

ループ不変表明 総称性 モデリングの core に何に使う? 契約による設計 Value Objects

JIT のデバッグには 0xEB 0xFE か 0xCC が便利

JIT コンパイラが生成したコードで落ちるときは、無限ループ(=0xEB 0xFE)を挿入し二分法で場所を特定。 落ちる直前のコードにデバッガ起動(0xCC)を挿入し、デバッガで事前条件が成り立っているか調べる。 という感じで進めると良いかも。0xCC だけでも…

続「自分の小さな「箱」から脱出する方法」を読んだ

「自分の小さな「箱」から脱出する方法」を読んだで、良い本だけど万人にすすめられる本ではない理由をうまく言語化できなかったのだが、極東ブログ: [書評]自分の小さな「箱」から脱出する方法(アービンジャー・インスティチュート)でうまく述べられてい…

7章「封筒の裏で・・・」 - 珠玉のプログラミング(Programming Pearls)

珠玉のプログラミングの7章。 7.6.1 分からない。 7.6.2 10Mbps と10GB のメモリスティックを10km/h で運ぶ。 ネットワークで 10GB 転送するには 800 秒かかる。 800 秒あれば約 2.5km 進める。1-2km ならメモリスティックを自転車で届けた方が良い。 でもよ…

「自分の小さな「箱」から脱出する方法」を読んだ

コミュニケーションの本。コミュニケーションテクニックの話は一切無い。 「自己欺瞞(箱に入る)」の状態が、いかに人間関係をダメにするかを主人公とともに学べる本。 会社の研修や、あやしげな宗教の勧誘でこの本を勧められたら、辟易してしまうであろう…

SRFI-102 Procedure Arity Inspection

手続きのアリティ(引数の個数)をプログラムから取得する手続きの提案です。SRFI-101 とおなじ提案者ですね。 SRFI 102: Procedure Arity Inspection

今日の復習

全て10割。 例外 vertex blending マルチコア

続2:ES1370 の音質が QEMU 0.8.2 と 0.10.5 で違う

続:ES1370 の音質が QEMU 0.8.2 と 0.10.5 で違うの続き。 色々と起動オプションを変えて観察してみた。-net user が ON/OFF で割り込み頻度が変わる。 ON の場合には 1/4 くらいになる。 Mona 側でどちらの場合とも、es1370.cpp の動きを見たが、割り込み…

アセンブラゆっくりと実装中

sar とか movsxd など知らなかったな。 SAR r/m64, imm8 : REX.W + C1 /7 ib MOVSXD r64, r/m32 : REX.W** + 63 /r

今日の復習

全て10割 再利用性へのアプローチ 仮想記憶 3つのモデルの有効性 高度なパイプライン ビヘイビア Buffer manager OS vs dbms

完全休日

今日は、ひげ太の面倒を妻に任せて完全休日だった。 明日は交代。僕が面倒を見て妻が休日。

飛行機を見に行った

多摩川のサイクリングコース経由で、羽田空港近くの城南島海浜公園へ。離陸直後の飛行機を間近で見られる。 思ったよりは間近ではなかったので望遠レンズが欲しいと思った。連休なので城南島は過疎ってた。 多摩川は野球場多い。 望遠レンズが欲しい。 大き…