mona

w3m on Mona

ようやく cookie の読み書きが正しく行われるようになりログイン状態が保持されるようになった。永続記憶万歳。

最近の Mona

facebook viewer を本格的に常用できるよう改善を続けている 描画速度 機能(コメントへの likeとか) Google C++ style guide に従うという試みをやってる。 1行80文字制限がしんどい。 kazuho 先生の picojson を使って楽をしまくり

最近の Mona

どんどん良くなっている。手応えを感じるよ。

MonaGUI の描画遅い問題

Facbook viewer アプリの表示速度に遅い。ちらつく場合もある。GUI システムにもきちんと踏み込んで調べてみた。 Facebook::repaint() が 60-120 msec ほどかかっていてそれが遅いと感じられる原因。 repaint() の流れは以下のとおり Facebook::repaint() Fr…

C/C++スタックトレースの話

某氏が書いてくれた Mona のスタックトレース表示機能は ebp をたどる方式。O2 とかだと -fomit-frame-pointer されてしまいうまく動かない。 スタックをある程度の深さ(浅さ?)まで全て舐めていき戻りアドレスっぽいものを全部表示したほうが良いような気…

Mona の FAT32 実装のバグを直した

Mona 上でファイルを作り、データを書きこむ。その後 QEMU を停止し fat32_user.img を Linux から mount する。mount 後 cp コマンドで Mona のファイルを Linux にバックアップするのだが、ときどき Linux のファイルシステムが Input error を吐いてファ…

あれ fprintf がうまくいかないな

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);

MonaGUI に alt-tab ウィンドウ切り替えを入れた

便利。もっと早く実現すべきだった。

GUIのテスト難しい

おおざっぱにいうと Window は大きなループがあるシングルスレッド。テストは別のスレッドで Window やらへの参照を保持してあれこれする。 Window への参照であれこれしてたらはまる。自分がスレッドセーフだと思い込んでいたところが間違っていたとか。結…

うぐ

GUI のバグと思われるものにハマる。落ちたり落ちなかったり。安定して再現しない。

String

GUI の String クラスの作りに不安があるのでテストを書き起こして valgrind もかけた。安心した。

assertEventually

Growing Object-Oriented Software, Guided by Tests (Addison-Wesley Signature Series (Beck))で紹介されていた assertEventually を実装した。これは何かというと「非同期の Unit Test で結果が期待されるものになるまでポーリングする」 assert 。 紹介…

GUI のテストにロボットを作った

新しいシェルを作っていてどうしても GUI のテストがしたくなった。マウスをクリックしたりキーボードを打って文字列を入力したり。 こういうお仕事は mouse/keyboard server にお願いすれば良いので楽だ。実装の簡単さに拍子抜け。Web の世界みたいにセレク…

今日の Mona

そろそろ shell を Mosh で置き換えたい -> プロセスの標準入出力の仮実装を置き換えたい -> MonAPI::Stream の機能を縮小して怪しいところを潰したい -> MonAPI::Stream のテストを書いて通そう -> MemoryMap にバグがある疑惑←今ここ

楽しいプログラミング

最近やっと Mona 上でコードが書けるようになってきた。長いときは1-2時間 Mona の上だけでコーディング。Mona API のプリミティブである monapi-name-xxx, monapi-message-xxx, monapi-stream-xxx 系を整備したのでマイクロカーネルで言うところの server …

w3m が落ちる問題

libbaygui-imp.a を libmonagui-imp.a としたら w3m が落ちるようになってしまった。(この原因の特定にも時間がかかった)。 どうもリンクして W3M.EXE を作るときに library name が libcrypto よりも辞書オーダーで前にないと executable が壊れてしまう…

今日の Mona

IME を disable したときに width=height=0 として隠していたのだがうまく動いていなかった。BayGUIが部品の動的なサイズ変更に対応していなかったので直した。

今週の Mona

Facebook viewer に pager のようなものがついた。それに先立ち domain と UI をきっちり分けた。途中で BayGUI 構造の把握に時間を取られ寄り道をしてしまった。 覚悟を決めて BayGUI を使いこなし足りない部分・バグは自分でどうにかする。それか Window …

BayGUI の制限にハマる

Window(Frame) 以外は Container になってはダメ。対応してない。

今週の Mona

Facebook viewer を実際に使って気になるところを潰してる。空白入りの文章が投稿できないとか。あとはやっぱり「いいね!」したいよな。 追記 「いいね!」の表示と追加に対応した。

Mosh on Mona 高速化一区切り

前回までのあらすじ。 block cache と PE cache で劇的に高速化 同じ条件の Linux と速度比較したいがどうしよう というわけで Ubuntu i386 を KVM にインストールして Mona と同じ条件にして測定してみた。グラフの赤い線が Linux での実行時間。 結論 Mosh…

Mosh on Mona が OS 側の改善でかなり速く起動するようになった

グラフを見れば一目瞭然。ファイルシステムに block cache を導入。リンカ・ローダーに PE cache を導入したらこんなに高速化した。グラフ上は目標値は Ubuntu amd64 で実際に Mosh を起動して測定した物。Mona が起動している KVM のホストなので目標値その…

Mona でブロックキャッシュ実験

Mosh on Mona 起動高速化の次のボトルネックは fasl-read 。ファイルの読み込み。 以前からブロックデバイスのキャッシュを作ったら効果があるだろうと思っていたのでナイーブな実装で軽く実験してみた。軽い気持ちの実験だったがうまく動かず。思った以上に…

Mona ファイル存在確認の高速化

時間を計測したところライブラリの fasl-read とライブラリの探索に使われる file-exists? が遅いことが分かった。 file-exists? は遅いときは 10 msec もかかってる。monapi_file_exists は手抜きをした記憶がある。見返すとナイーブな実装だったので改善し…

Mosh on Mona のスタートアップが遅い

Mona で Facebook viewer を作っている。Graph API など難しい部分は Mosh に任せていて view だけ BayGUI。 そこで問題になっているのが Mosh の起動時間。(import (rnrs)) だけのスクリプトの実行に 200 msec 。手元の Linux だと50 msec ほど。 さらにい…

今日の Mona

いろいろスリムになった Mosh を Mona でも動かした。2000回起動してもリソースリークしない。

virtio block デバイスの挙動がおかしい件のメモ

Mona の virtio block デバイスドライバで見られた症状のメモ。 環境は qemu 0.14.0 。 症状 used index が更新され getBuf できた状態であるにも関わらず status が更新されないことがある。 試したこと cookie の一致確認により目的外のバッファを取り出し…

今週の Mona

Mosh の連続起動に始まったいくつかのバグをひたすら直している。 仕様をシンプルにし、テストを書いてコードがどんどん減っていく。 MSG_PROCESS_TERMINATED の仕組みを簡素化 thread が親の stdout/stdin を継承するように(対応忘れてた) process_server…

Mosh on Mona が落ちるのは

virtio block driver のバグっぽい。デバイスからの割り込み→デバイスステータスのチャック→読み込みステータスのチェックという流れで、2番目のチェックに失敗しているように見える。この辺りは資料がないから実装を追うしかないかな。

Mosh on Mona がたまにファイル書き込みに失敗する

Mosh on Mona がたまにファイル書き込みに失敗するのは、どうも FAT32 の FAT 更新に失敗しているっぽい。これ warning だしてたけど fatal にしよう。