Entries from 2009-07-01 to 1 month

問題は TAP かも - パケット遅延問題

ICMP パケットの sequence number を手がかりに追ってみた。 Mona が ICMP Request 受信 Mona が ICMP Reply 送信 QEMU(virtio-net)がパケット送信 QEMU が tap デバイスに writev する までほぼ一息に実行されていることが分かった。 ところが tcpdump の出…

今日の復習

Light Source type 7割 以下10割 データ格納方法 Value Object 問題の正確な定義 Testability

1章 真珠貝を開いて - 珠玉のプログラミング(Programming Pearls)

珠玉のプログラミングの1章。 1.6.1 全てを配列(Scheme の場合はリスト)に読み込み list-sort する。 1.6.2 コード bits の実装参照。 1.6.3 メモリ上に全て読み込んでからソートしたほうが圧倒的に速かった。 これは Mosh 特有の false pointer 問題で bi…

耳に聞こえる変化

今朝起きたら、ひげ太がメジャーバージョンアップしてた。 話しかけると「あー」、「めぇー」「うぇーー」とか返事をするようになった。明らかにこちらの言葉を入力に出力を返している。楽しくてたくさん話しかけてしまう。 昨日までは1時間に一度くらい気ま…

今日の復習

Light Source type 0割 データ格納方法 0割 IEEE 754 Intel 浮動小数 Texture mapping

gen_server あるある

handle_call({link_op, NodeToLink, Direction, Level}, _From, State) -> ok; と空実装を書いて怒られる。 handle_call({link_op, NodeToLink, Direction, Level}, _From, State) -> {reply, ok, State}; が正解。

今日の復習

Definition completion 3割 以下10割 ヘネパタ加算・減算 SQL の実行 ロックで concurrency コントロール Seam model

Erlang のパターンマッチが良い感じ

lists:map(fun({_, _, MVector}) -> MVector end, Level0Nodes) これはコーディングスタイルに影響しそう。Scheme でも match-lambda をもっと使おう。 case-lambda はアリティだけなので中途半端と感じる。getter 兼 setter 的な手続きを作るときくらいしか…

Erlang の Common Test におけるエラーログがうまくいかない

Common Test のログは端末に、その他の error_logger 経由のログはファイルに出力したいがうまくいかない。 run_test に -config elog.config を渡しすのはうまくいかない。 [{kernel, [{error_logger, {file, "log/hige.log"}} ]}]. xxx_SUITE の先頭で err…

psyntax パフォーマンスチューニング

psyntax のコードは R6RS Records を利用しているのだが、それを別のデータ構造にすげ替えることができる。実際に Ikarus では simple record で実装されている。 Mosh では R6RS Records よりも vector の方がアクセスが速いので、入れ替えてみた。1割ぐら…

今日の復習

ロックでコンカレントコントロール 2割 以下10割 Web Tier メモリクリア比較 ETS IoC

Erlang の lists:nth ではまる

1> lists:nth(0, [1]) 1> . ** exception error: no function clause matching lists:nth(0,[1]) このエラーメッセージでは何が起きているか分からない。正解は index は 1 から始まるのでエラー。

カバレッジ

Gauche:testについて で koguro さんがカバレッジ率の表示をリクエストされているんですが僕も欲しいな。 Mosh にもぜひ入れたい。どうやればうまくデータがとれるかな。寝る前に考えてみよう。

今日の復習

Web Tier 2割 以下10割 高校生の勉強方法 データパスと制御 Transaction and schedule プロジェクトがオブジェクト指向ではない 変更たくさん全てのクラスで BD 必要

Erlang で変数を shadow するとひどい目に遭う

send しているのに receive でブロックするの原因は変数の shadow が原因だった。 handle_call({search, ReturnToMe, Key}, _From, State) -> 上の handle_call の Key と下の receive の Key がかぶっているので別のノードから返ってきた Key が Key にマッ…

Erlang で LOG マクロ

-define(L(), error_logger:info_msg("{~p ~p,~p}:~n", [self(), ?MODULE,?LINE])). -define(LOG(X), error_logger:info_msg("{~p ~p,~p}: ~s = ~p~n", [self(), ?MODULE,?LINE,??X,X])). -define(LOGF(X, Data), error_logger:info_msg("{~p ~p,~p}: "++X++…

send しているのに receive でブロックする

send しているのに受け取り側でブロックするのはなぜだ。receive 条件を _ にしても受信できないので失敗しているのかな。 gen_server:handle_call から隣のノードに gen_server:cast しているんだけどこれが原因だろうか? 検索で 開始ノードが handle_call…

WEwLC の翻訳版「レガシーコード改善ガイド」が出るらしい

一人読書会 - WORKING EFFECTIVELY WITH LEGACY CODE (WEwLC)で読んでいた本の翻訳が出るようだ。 お仕事上の関係で「テストがないコード」とおつきあいをしなければいけない人は読むとためになると思います。 どれだけテストを書く事に力を入れるかの加減も…

パケット遅延問題 その4

uIP の ICMP 応答のコードを読んだところ Request ヘッダの一部を書き換えて Reply にして即座に応答を返していることが分かった。 一方 Wireshark 上では確実に 1-3秒ほど遅れて応答が出ている。 ここから考えられる仮説は 自分が書いた virtio ドライバの…

今日の復習

Transaction and schedule 1割 変更たくさん BD 必要? 0割 プロジェクトがオブジェクト指向じゃない 5割 データパスと制御 10割 pull up features 10割

psyntax 最新化中

R6RS expand 高速化の前に psyntax を最新のものに入れ替え中。 うまく動かないので実装を追う必要がありそうだ。

近所を散歩

生まれてから1ヶ月が経ったので、少しずつ外に出そうということで散歩に連れ出した。 近所をひとまわりしただけだが、ひげ太には多くの刺激が入力されたようだ。 夕方の優しい陽の光、遊んでいる子供たちの声、少し強めの風、車やバイクの音など、家とは違う…

今日の復習

IA32概要 乗算 明示的なロック シンクロナイザ スレッドセーフクラスの作り方 全て10割。

shibuya.lisp Tech Talk #3 で感じたこと

来てくださった皆さん、TTer、LTer、スタッフの皆さん、お疲れ様でした。今回も楽しい会となって良かったです。 講演を聞いてトータルで感じたのですが、講演者それぞれのバランス感覚の違いが成果物やプレゼンに現れていて大変勉強になりました。 どこに注…

Shibuya.lisp Tech Talk #3

始まった。

今日の復習

昨日の分書き忘れた。 明示的ロック7割 Java メモリモデル5割 スレッドセーフクラスの組み立て 2割 以下10割 Erlang 外部接続 汎用イベント処理 並行プログラムにおけるエラー 速読 Ubiquitous Language コピペあり?

Mosh がとても小さな変更でかなり遅くなっていた

Record Accessor のエラーメッセージで詳細を出す目的で書いた数行のコードのために、Mosh 全体が4-5倍ほど遅くなっていた。 Record アクセスの度に、こんな事をしていたら遅くなるのは当たり前なのだが書いた当初は全く気付かなかった。 233 233 234 234 Ob…

Gauche では map は組み込み手続き

どれくらい効果があるんだろう。実験してみようか。

Erlang の Record を更新する

gen_server::handle_call の State を構造体で表現しているとして -record(state, {key, value, left, right}). value だけ更新して、reply したい場合がある。今までは {state, State#state.key, myValue2, State#state.left, State#state.right} としてた…

Erlang のエラーメッセージは分かりづらい

kvs

みんな同じ感想を持っているようだが、とにかく分かりづらい。 内部実装がパターンマッチを多用しているからだろうか?