Backnumber

June, 2006
May, 2006
April, 2006
March, 2006
February, 2006
January, 2006
December, 2005
November, 2005
October, 2005
September, 2005
August, 2005
July, 2005
June, 2005
May, 2005
April, 2005
March, 2005
Feburary, 2005
January, 2005
December, 2004
November, 2004
October, 2004
September, 2004
Augsut, 2004
July, 2004
June, 2004
May, 2004
April, 2004
March, 2004
February, 2004
January, 2004
December, 2003
November, 2003
October, 2003
September, 2003
August, 2003

- HMDT archive-
Augsut, 2004

August 31

シイラ nightly build 040831。

  • ウィンドウを閉じたときにクラッシュする問題を修正(Thanks to Hetima)。
  • ダウンロードパネルの表示を改善(Thanks to yukishiro)。
  • タブに関する様々な修正。

まず、Hetima さんに指摘してもらった方法で、クラッシュの問題を回避。これが正しい方法かどうかは分からないが、とりあえずクラッシュしなくなったと思う。次は yukishiro さんに送ってもらったパッチで、ダウンロードパネルの表示を改善(選択した文字列が白抜きになった)、複数行選択可能、などなど。

近いうちに 0.9.3 を出したいです。が、ローカライズが非常にてこずってたり。

August 27

昨日のシイラのビルド、古い方が入っていたようで、申し訳ありませんでした。最近ミスが多い。駄目すぎです。落ち込みます。

でも気を取り直して、新しいビルドを。シイラ nightly build 040827。

  • ブラウザウィンドウ以外のウィンドウが表示されているときに、シイラをアクティブにしても新規ドキュメントが表示されない問題の修正。
  • サイドバーでホイールが効かない問題の修正。
  • サイドバーを表示したままウィンドウをドラッグしたときの問題の修正。
  • その他いろいろ。

メールや掲示板で指摘していただいた問題を集中的に直してます。エラーログがあると、ほんと速いです。

目下のところ一番の問題は、掲示板で指摘のあった、「スターアライアンスのページ(http://www.staralliance.jp)で、検索ボタンを押して表示されるウィンドウを閉じるとクラッシュする」というもの。これ、再現率 100% です。

かなり時間を割いて調べてみたんだけど、、、う〜ん分からねぇ〜。どうも想像するに、ウィンドウを閉じるとそこに貼付けてある WebView が解放されるんだけど、その WebView に向けてシステムがメッセージを投げているようだ。ということは、システム内部にまだ参照が残っているということ?原因が分からないので、ウィンドウを閉じてから WebView を解放するまでのシナリオを、もう一度じっくり洗い直す必要がありそうだ。

これが解決すれば、かなり安定すると思うんだよ。ちなみに、安定性の問題を解決するために一番必要なものは、「再現率 100% で問題を発生させる手順を突き止めること」なんだ。そういう意味では、スターアライアンスのページを教えてくれたのは、グッジョブです。

August 26

シイラ nightly build 040826。

  • ドキュメントが開いていないときに、Dock のシイラへ D&D したときの問題の修正。
  • タブバーへリンクをドラッグしたときに、新規タブが開かない問題の修正。
  • その他、安定性を高めるための修正。

エラーログのレポートのおかげで、がんがんと進んでおります。送っていただいた方々、ありがとうございました。

あれ、sourceforge の CVS つながらん。接続が拒否される。なんで?

August 25

シイラのデバッグレポート、たくさん送っていただいてありがとうございました。いやー、助かる!この情報が欲しかったんだよ。問題の箇所が一目瞭然だ。もっと早くやればよかった。

というわけで、シイラ nightly build 040825。

  • キーコンビネーションとともにリンクをクリックしたときの問題を修正。
  • ドラッグ時にクラッシュする問題の修正。
  • その他の問題の調査のためのデバッグ文を挿入。

最初の修正は、コマンドキーやオプションキーとともに、リンクをクリックしたときに起きていた問題を修正したもの。2 つ目は、ドラッグ時に発生していたクラッシュを修正するもの。たぶんこれで直ると思うんだけど。

3 つ目は、問題を報告してもらったけど原因を特定できなかったので、さらに詳しい情報を取得するためにデバッグ表示を増やしたもの。同じ問題が発生したら、もっと詳しくデバッグ文が出るはず。ということで、エラーが出た場合はレポートをよろしくお願いします。

August 24

ごめんなさい。昨日のシイラ起動できなかったと思います。ビルドのときに、リリース用に切り替えるのを忘れていた。ゼロリンクの罠にはまってしまった。

ということで、シイラ nightly build 040824 をリリース。機能は 040823 と同じく、デバッグウィンドウの追加。デバッグウィンドウにエラーログが表示されたら、レポートをお願いします。

August 23

引っ越しは、最後の荷物が家に届いた。ダンボール箱に囲まれて生活中。

続いてシイラ。掲示板での不具合報告ありがとうございます。で、修正すべくテストを繰り返しているんだけど、なかなか再現しないんですよ、これが。

プログラムの修正は、バグの報告を受けたら、それを再現させることから始まるんだ。単純なバグならすぐ再現させて問題の箇所を見つけることができるんだけど、最近はなかなか再現させることができない。やっかいなバグが多い。

じゃどうするかというと、エラーログが欲しい。デバッグに必要な情報はエラーログに出てくるんだ。ということで、シイラ nightly build 040823 でデバッグウィンドウを追加してみた。

「ウィンドウ→デバッグ」メニューで、デバッグウィンドウを表示する。ここにアプリケーションからのエラーログを表示するようにした。さらに、メールでレポートできるようにしてみた。

ということで、お願いがあります。シイラを使っていて何か不具合が発生したら、デバッグウィンドウをチェックしてもらえないでしょうか。そして、何かしらメッセージが出ていたら、メールでレポートしてもらえないでしょうか。その時に、どういう動作をしたか書いてもらうと助かります。また、クラッシュした場合は、クラッシュレポートをコピーしたものを送ってもらえないでしょうか。長くてもかまわないです。それが必要なんです。お願いします。

ちなみに、デバッグウィンドウには NSLog() の内容を表示している。NSLog() で表示される文字列を、取得する方法を調べるのがすごく手間取った。始めは、別プロセスを立ち上げてパイプでつないでやるか、と思ったけど、なんかうまくいかん。

調べまくった結果、_NSSetLogCStringFunction() を使うと実現できるらしい。こんな感じで使っている。

(sample)
extern void _NSSetLogCStringFunction(void(*)(const char*, unsigned, BOOL));

static void _SRLogCString(
    const char* message, unsigned length, BOOL withSysLogBanner)
{
    NSAutoreleasePool*  pool;
    pool = [[NSAutoreleasePool alloc] init];
    
    // Append debug string
    NSString*   string;
    string = [NSString stringWithCString:message length:length];
    [[SRDebugWindowController sharedInstance] appendDebugString:string];
    [[SRDebugWindowController sharedInstance] appendDebugString:@"\n"];
    
    [pool release];
}

- (void)awakeFromNib
{
    // Register customized log function
    setbuf(stderr, NULL);
    _NSSetLogCStringFunction(_SRLogCString);
}

_NSSetLogCStringFunction() で関数を設定してやると、NSLog() がその関数を呼び出すらしい。

August 17

シイラ nightly build 040817。今度こそ。

  • 今度こそ、タブブラウジング中の問題修正。

これで直ったら、掲示板で報告してくれた方々のおかげです。ありがとう!

August 16

ネットワーク開通!いやー、ADSL って速いっすね。これであとは、船で送った荷物が届けば、完全復活だな。

シイラ nightly build 040816。

  • さらに、タブブラウジング中の問題修正中。
  • サイドバーからの、ブックマークフォルダのドラッグ・アンド・ドロップに対応。
  • ページ中のリンクの、サイドバーへのドラッグ・アンド・ドロップに対応。
  • ユーザエージェント名の候補を追加。
  • ブックマークバーのバグを修正。
  • 画像のアニメーションに関する設定を無効化。

前回のビルドはとても安定していなかったようで、申し訳ないです。ソースコードはそんなに変えてないはずだったのだが。原因を考えたんだけど、これかも?というのが、Mac OS X 10.3.5 と開発環境。OS が 10.3.5 にアップデートして、開発環境である Xcode も 1.5 にアップデートしたでしょ。OS はアップデートしたんだけど、開発環境のアップデートは後回しにしていたんだよな。両方最新に合わせてビルドしてみたので、これでなにか変わってくれるとうれしいのだが。

あとは、その他いろいろ機能強化。最後の、画像のアニメーションに関する設定の無効化というのは、環境設定にアニメーションを停止、っていう設定があったけど、どうも Web Kit が未実装のようなので、とりあえず無効化した。最初のバージョンでは効いていたような気がするんだけどなー。

ネットワークが開通したので、久しぶりに CVS をアップデート。これからは、毎回やります。

あにさん、koh さん、バスケさんと、こっそり飲み会。楽しかったです。

ネットで知り合った人に実際に会うと、日本に戻ってきてよかったな、と思いました。

August 13

シイラ nightly build 040813。

  • 再び、タブブラウジング中の問題修正中。

タブを閉じるときに問題があったのを修正したり、いくつかのメモリリークを取り除いたり、いろいろ手を講じてみたんだけど、どうでしょ?こちらでテストする分には、とりあえず落ちたり制御不能になることはなくなったと思うんだけど。

ついでに、メモリの使用量の話。

アクティビティモニタとかでシイラを見ていると、どんどんごんごんメモリの使用量が増えていくと思う。それも、数 10 MB の単位で。これを見ると、やばいよなぁ、と思うよね。

前から気になっていたので、徹底的に調査してみた。その結果、シイラのプログラム側での致命的なメモリリークはないと思う。多分。つまり、メモリの使用量が増えていくのは、Web Kit の仕様ということだ。Safari も同じぐらい使ってるし。

そんなにたくさんメモリを何に使っているのか?それはキャッシュだ。キャッシュとは、取得するのに時間がかかるリソースをメモリ上やディスク上に置いておくことで、スピードを上げる技術のこと。

たとえば、ネットワークの先に置いてある画像を取得するのは時間がかかる。そこで、一度取得したら、ディスク上に置いておき、次回からそれを使う。さらに、ディスクへのアクセスは時間がかかる。そこで、一度読み込んだ画像を、メモリ上に置いておく。また、画面上に文字を書くときは、フォントからビットマップを作り出すので、時間がかかる。そこで、いったんビットマップに落とした文字列を、メモリ上に置いておく。他にも、ファビコンのキャッシュとか、履歴のキャッシュとか。

こんな感じに、Web Kit はさまざまなキャッシュを使っている。キャッシュってのは効果が大きい技術で、これを使うと劇的に速くなる。その代償として、メモリの使用量は増える。

シイラは、キャッシュの状態を表示するために、キャッシュパネルを装備している。また、Safari もデバッグメニューから、キャッシュパネルを表示することができる。Safari のキャッシュパネルには、WebFoundation Caches と WebCore Cahces という 2 種類があるでしょ。前者はネットワークリソースのキャッシュで、後者はレンダリング結果のキャッシュだ。そしてシイラのキャッシュパネルがいまのところが表示しているのは、ネットワーク上のリソースのキャッシュだ。

これが、増えまくるメモリの使用量の正体だ。このキャッシュが、Safari やシイラのレンダリング速度を支えている。とはいうものの、やっぱりメモリ増えるのはいい気分ではないよね。そこで、シイラの次のバージョンでは、キャッシュパネルを拡張して、できる限りのキャッシュを消すオプションを付けてみようと思う。できるかどうか分からんけど、調査はしてみる。

August 12

Web ページ更新チェッカーとして有名な、MacFeeling さんの WebPatrol がシイラの AppleScript に対応してくれました。ありがとうございます。

シイラ nightly build 040812。

  • タブブラウジング中の問題修正中。
  • 起動時間が少し短縮。

掲示板の方で、最近のビルドを使うとタブブラウジング中に問題がでると報告いただきました。ありがとうございます。ただいま修正してますけど、原因が特定できてないです。とりあえず、今回のビルドでは怪しいところを外したので、また報告していただけると助かります。

起動時間は少し短くなったと思う。まだまだ最適化を進めていきます。

ちなみに、環境設定で Safari のブックマークを表示しないようにすると、起動時間が短くなるよ。

アプリケーションの実行速度を改善することと、開発サイクルについて。

アプリケーションのパフォーマンス改善って、地道で複雑で難しいもの。でも、効果の現れ方は劇的なので、ぜひともやらなくてはいけないんだよな。

改善する際の鉄則は、どこが遅くなっているかを調べること。デスクトップアプリケーションならば、「ディスクアクセスをするところ」が、大体遅いです。ドキュメントの読み書きだけではなく、リソースの読み込みや、初期設定の保存とかも含まれる。これらがボトルネックになることが多い。

でもこれって、速くすることができない処理なんだよね。読み込みを速くするには、OS レベルに手を入れるしかない。または速いディスクを買ってもらうとか。そしてさらに困ったことに、処理を省略することもできない。たとえば、ツールバーのアイコンの読み込みって結構時間がかかるんだけど、これを省く訳にはいかない。

じゃどうするかというと、「処理するタイミングをずらす」。時間のかかる処理を一カ所に集中させないで、少しづつずらしてユーザの邪魔にならないようにするんだ。プログラムを書く立場からすれば、必要なリソースは起動時に一気に読み込んでしまうのが楽だし安全だ。でもこれをやると、起動時間がとても長くなってしまう。だから、リソースが必要なときに、必要な分だけ読み込むようにする。たとえば、シイラには環境設定やキャッシュパネルといった補助ウィンドウがあるけど、これらに関するリソースはユーザがこれらを初めて表示するときに読み込むようにすればいい。そうすれば速くなる。

だけど理屈ではそうだと分かっていても、これがなかなか難しい。ソフトウェアを作り始めるときに仕様がびったり確定していれば、始めからそれを意識して作れる。だけどシイラみたいに作りながら機能の追加・修正を行うタイプだと、なんともかんとも。この場合は、機能追加→ある程度で機能固定→とりあえず最適化・バグフィックス→また機能追加、、、っていうサイクルを回さなくてはいけない。

こういう進め方は、製品を作る場合はやってはいけない。締め切りが守れなくなるから。だけど、トライ・アンド・エラーを繰り返せるっていうことで、いい面もあるんだよね。シイラは特に納期が決まっている訳ではないので、もう少しこの方法でいくでしょう。そろそろ、0.9.3 に向けて、最適化とバグフィックスステージに入ると思います。

August 11

シイラ nightly build 040811。

  • 履歴サイドバーでのコピー対応。
  • タブのダブルクリックでページ再読み込み。

来週月曜、ネットワーク開通予定。

August 10

Apple が Darwin 8.0b1 のソースコードを公開していたけど、その中に WebCore-146.1 と JavaScriptCore-146.1 も含まれていた。気がつかなかったよ!WebCore のページは更新されていなかったからな。

WebCore-146.1 は、Safari 1.3、つまり Safari RSS と呼ばれているやつ、のコードになる。ざっと目を通すと、

  • XML パーサの expat が削除されている。libxml を使うように変更になったようだ。
  • HTML 編集機能が追加されている。editing というディレクトリにまとめられている。
  • XBL サポートが追加されている。xbl というディレクトリにまとめられている。

ということが分かる。

逆に、Safari 1.3 でサポートされるけど、WebCore に含まれていないものは、RSS とページのアーカイブ機能か。これらは、WebKit か Safari アプリケーションのレイヤでサポートされるのでしょう。

ちなみに、HTML 編集機能は、KHTML だけで実装されているようにみえる。HTML を編集するには、DOM ツリーの編集と GUI サポートが必要になるんだけど、どっちも KHTML 内部にあるみたい。ということは、KHTML ベースのブラウザである Konqueror でも使えるんじゃないかな。

Darwin のライブラリ見ると、libxslt はあるけど SQLite は無い?ここには入るって書いてあるのに。

August 9

シイラ nightly build 040809。

  • AppleScript 対応。
  • SSL 時に鍵アイコン表示。
  • 背面のタブでエラーが起きたときも、エラーダイアログを表示。

ようやっと AppleScript に対応。とりあえず、HTML 取得、テキスト取得、URL の取得と設定に対応。

あと、SSL 接続のときに、鍵アイコンをステータスバーに表示。本当は Safari みたいにタイトルバーに表示したかったけど、やり方が分からなーい。標準の Cocoa ではサポートされないので、ハックしなくてはいけない。

ダイアルアップで更新作業しようとしたら、2 MB のファイルをアップロードするのに 30 分かかっても終わらない。どうにかネットワークがつながるとろを見つけて、更新中。

あと、生活環境を整えるためにいろいろ注文したら、お盆休みの影響で配送まで 2 週間かかるって。うぬぬぬぬ。

August 7

ようやく新しい家に入れたよ。だけど、まだ荷物が 1/3 ぐらいしか届いていなくて、ぜんぜん生活環境が整ってない、、、

ネットワーク環境も同じ。ADSL 申し込んだけど、あと 10 日ぐらいかかるって。がっくし。現在、ダイアルアップで接続中。2、3 年前までは、この遅さだったんだよな。

シイラ開発しているけど、この遅さではとてもアップロードできない。どこか、速いネットワークがあるところを探さないと。

August 3

シイラ nightly build 040803。

  • URL コンボボックスからサイドバーへのドラッグ時のバグを修正。
  • エンコーディングメニューを拡張して、すべてのエンコーディングに対応。

エンコーディングメニューに、Safari と同じだけのエンコーディングを追加してみた。正しく動作しているかは、それぞれの言語が分からないので、不明。たぶん、動くと思うんだけど。

August 2

いまだ家に入居できず、スーツケースを抱えて汗だくでホテルを転々とする日々。

でも、今度のホテルはネットワークにアクセスできるので、久しぶりに腰を据えて更新。

というわけで、シイラ nightly build 040802。

  • ブックマークサイドバーでのコピー・アンド・ペースト対応。
  • ドラッグ・アンド・ドロップ強化。

コピー・アンド・ペーストに関しては、何をいまさら、って感じだよな。このぐらいのもの、最初の公開時にやっておくべきことだ。ドラッグ・アンド・ドロップの強化は、ブックマークの詳細表示にある、画像からのドラッグとか。

前の作業から時間が経っているので、自分で書いたソースコードの解析から始めなくてはいけない。いちばん、落ち込む作業だ。

たまりにたまっていたメールは、いま読んでいるところです。


[Home] [Download] [Archives] [BBS] [Cocoa Programming Tips 1001] [Core Foundation の秘密] [Safari Developer Center] [はじめてのブラウザのつくり方] [Sketch BP] [スクリーンセイバーを作ろう] [Objective-C 最適化] [Authorization API 完全理解] [Mac OS X Programming Books Review] [オブジェクト指向の言語比較論] [panther-dev]

mailto: mkino@xd5.so-net.ne.jp