mona
ようやく cookie の読み書きが正しく行われるようになりログイン状態が保持されるようになった。永続記憶万歳。
facebook viewer を本格的に常用できるよう改善を続けている 描画速度 機能(コメントへの likeとか) Google C++ style guide に従うという試みをやってる。 1行80文字制限がしんどい。 kazuho 先生の picojson を使って楽をしまくり
どんどん良くなっている。手応えを感じるよ。
Facbook viewer アプリの表示速度に遅い。ちらつく場合もある。GUI システムにもきちんと踏み込んで調べてみた。 Facebook::repaint() が 60-120 msec ほどかかっていてそれが遅いと感じられる原因。 repaint() の流れは以下のとおり Facebook::repaint() Fr…
某氏が書いてくれた Mona のスタックトレース表示機能は ebp をたどる方式。O2 とかだと -fomit-frame-pointer されてしまいうまく動かない。 スタックをある程度の深さ(浅さ?)まで全て舐めていき戻りアドレスっぽいものを全部表示したほうが良いような気…
Mona 上でファイルを作り、データを書きこむ。その後 QEMU を停止し fat32_user.img を Linux から mount する。mount 後 cp コマンドで Mona のファイルを Linux にバックアップするのだが、ときどき Linux のファイルシステムが Input error を吐いてファ…
FILE* fp = fopen(historyPath_.c_str(), "a"); if (fp == NULL) { return; } if (fseek(fp, 0, SEEK_END) == -1) { fclose(fp); return; } fprintf(fp, "%s\n", text.c_str()); fclose(fp);
便利。もっと早く実現すべきだった。
おおざっぱにいうと Window は大きなループがあるシングルスレッド。テストは別のスレッドで Window やらへの参照を保持してあれこれする。 Window への参照であれこれしてたらはまる。自分がスレッドセーフだと思い込んでいたところが間違っていたとか。結…
GUI のバグと思われるものにハマる。落ちたり落ちなかったり。安定して再現しない。
GUI の String クラスの作りに不安があるのでテストを書き起こして valgrind もかけた。安心した。
Growing Object-Oriented Software, Guided by Tests (Addison-Wesley Signature Series (Beck))で紹介されていた assertEventually を実装した。これは何かというと「非同期の Unit Test で結果が期待されるものになるまでポーリングする」 assert 。 紹介…
新しいシェルを作っていてどうしても GUI のテストがしたくなった。マウスをクリックしたりキーボードを打って文字列を入力したり。 こういうお仕事は mouse/keyboard server にお願いすれば良いので楽だ。実装の簡単さに拍子抜け。Web の世界みたいにセレク…
そろそろ shell を Mosh で置き換えたい -> プロセスの標準入出力の仮実装を置き換えたい -> MonAPI::Stream の機能を縮小して怪しいところを潰したい -> MonAPI::Stream のテストを書いて通そう -> MemoryMap にバグがある疑惑←今ここ
最近やっと Mona 上でコードが書けるようになってきた。長いときは1-2時間 Mona の上だけでコーディング。Mona API のプリミティブである monapi-name-xxx, monapi-message-xxx, monapi-stream-xxx 系を整備したのでマイクロカーネルで言うところの server …
libbaygui-imp.a を libmonagui-imp.a としたら w3m が落ちるようになってしまった。(この原因の特定にも時間がかかった)。 どうもリンクして W3M.EXE を作るときに library name が libcrypto よりも辞書オーダーで前にないと executable が壊れてしまう…
IME を disable したときに width=height=0 として隠していたのだがうまく動いていなかった。BayGUIが部品の動的なサイズ変更に対応していなかったので直した。
Facebook viewer に pager のようなものがついた。それに先立ち domain と UI をきっちり分けた。途中で BayGUI 構造の把握に時間を取られ寄り道をしてしまった。 覚悟を決めて BayGUI を使いこなし足りない部分・バグは自分でどうにかする。それか Window …
Window(Frame) 以外は Container になってはダメ。対応してない。
Facebook viewer を実際に使って気になるところを潰してる。空白入りの文章が投稿できないとか。あとはやっぱり「いいね!」したいよな。 追記 「いいね!」の表示と追加に対応した。
前回までのあらすじ。 block cache と PE cache で劇的に高速化 同じ条件の Linux と速度比較したいがどうしよう というわけで Ubuntu i386 を KVM にインストールして Mona と同じ条件にして測定してみた。グラフの赤い線が Linux での実行時間。 結論 Mosh…
グラフを見れば一目瞭然。ファイルシステムに block cache を導入。リンカ・ローダーに PE cache を導入したらこんなに高速化した。グラフ上は目標値は Ubuntu amd64 で実際に Mosh を起動して測定した物。Mona が起動している KVM のホストなので目標値その…
Mosh on Mona 起動高速化の次のボトルネックは fasl-read 。ファイルの読み込み。 以前からブロックデバイスのキャッシュを作ったら効果があるだろうと思っていたのでナイーブな実装で軽く実験してみた。軽い気持ちの実験だったがうまく動かず。思った以上に…
時間を計測したところライブラリの fasl-read とライブラリの探索に使われる file-exists? が遅いことが分かった。 file-exists? は遅いときは 10 msec もかかってる。monapi_file_exists は手抜きをした記憶がある。見返すとナイーブな実装だったので改善し…
Mona で Facebook viewer を作っている。Graph API など難しい部分は Mosh に任せていて view だけ BayGUI。 そこで問題になっているのが Mosh の起動時間。(import (rnrs)) だけのスクリプトの実行に 200 msec 。手元の Linux だと50 msec ほど。 さらにい…
いろいろスリムになった Mosh を Mona でも動かした。2000回起動してもリソースリークしない。
Mona の virtio block デバイスドライバで見られた症状のメモ。 環境は qemu 0.14.0 。 症状 used index が更新され getBuf できた状態であるにも関わらず status が更新されないことがある。 試したこと cookie の一致確認により目的外のバッファを取り出し…
Mosh の連続起動に始まったいくつかのバグをひたすら直している。 仕様をシンプルにし、テストを書いてコードがどんどん減っていく。 MSG_PROCESS_TERMINATED の仕組みを簡素化 thread が親の stdout/stdin を継承するように(対応忘れてた) process_server…
virtio block driver のバグっぽい。デバイスからの割り込み→デバイスステータスのチャック→読み込みステータスのチェックという流れで、2番目のチェックに失敗しているように見える。この辺りは資料がないから実装を追うしかないかな。
Mosh on Mona がたまにファイル書き込みに失敗するのは、どうも FAT32 の FAT 更新に失敗しているっぽい。これ warning だしてたけど fatal にしよう。