2004年10月31日

COMスマートポインタ

環境
Visual C++.NET 2003
ライブラリ
MSXML3

本記事では、WindowsのCOMライブラリを扱いやすくしてくれるcom_ptr_tクラスを紹介したいと思います。

com_ptr_tは、IUnknownインターフェースのQueryInterface、AddRef、Releaseメンバ関数周りを隠蔽してくれるテンプレートクラスで、いわゆるスマートポインタの一種です。

_com_ptr_tは、単体でもそれなりに便利ですが、これがVisual C++の色々な機能と結びついてさらに便利になっています。

例えばMSXML3を使ってXMLファイルを読み込むコードが、_com_ptr_tを使ってどのように簡単になるのかを見てみましょう。

#import "msxml3.dll" named_guids

int main(int argc, char* argv[])
{
  // COMライブラリ初期化
  ::CoInitialize(NULL);

  try {
    MSXML2::IXMLDOMDocument2Ptr pDoc;
    pDoc.CreateInstance(MSXML2::CLSID_DOMDocument);
    pDoc->async = false;
    if (pDoc->load(L"test.xml")) {
      // Root要素名を表示する
      printf("RootNodeName: %s\n",static_cast<const char*>(pDoc->documentElement->nodeName));
      // Root要素の子要素一覧
      MSXML2::IXMLDOMNodeListPtr pList = pDoc->documentElement->childNodes;
      for (long i = 0, n = pList->length; i < n; ++i) {
        MSXML2::IXMLDOMElementPtr pElement = pList->Getitem(i);
        if (pElement) {
          // 子ノードが要素の場合のみ処理する
          printf("ChildNodeName: %s\n",static_cast<const char*>(pElement->nodeName));
        }
      }
    }
  }catch (_com_error& e) {
    // 例外ハンドラ
    printf("Error: %s\n", e.ErrorMessage());
  }

  // COMライブラリ終了
  ::CoUninitialize();
  return 0;
}

面倒なQueryInterface、AddRef、Releaseが綺麗に消えていることが分かると思います。VBScriptに近いお手軽さです。

ところで、上記コードには、_com_ptr_tという文字列は存在しないということに注意して下さい。
_com_ptr_tが使われているのは、上記#importによって自動生成されるmsxml3.tlhというヘッダファイルの中です。ここに、

typedef _com_ptr_t<IXMLDOMDocument2, &__uuidof(IXMLDOMDocument2)> IXMLDOMDocument2Ptr;
typedef _com_ptr_t<IXMLDOMElement, &__uuidof(IXMLDOMElement)> IXMLDOMDocument2Ptr;

というような感じの定義があるのです。

何か不都合があると、_com_error例外を投げてくれるのもありがたいところです。例外処理がシンプルになります。

一度COM周りのコードを書いた人なら分かると思いますが、_com_ptr_tを使わずに上記のコードを書いてみると、相当大変です。_com_ptr_t万歳。

一応最後に書いておきますが、_com_ptr_tは、MSXML3に限らず、他のCOMインターフェースに対しても使えます。例えば、CreateStreamOnHGlobalで取得したIStreamをIStreamPtrに代入して・・・ということもできますし、DirectX9周りで活用することもできます。色々と試してみて下さい。
但し、_com_ptr_tは、Visual C++の独自機能を相当使っているはずです。移植性が必要な場合は、使わない方が良いでしょう。

2004年10月30日

Heimdallr 1.07alpha2リリース

Heimdallr 1.07alpha2をリリースします。
安定版ではありません。
Heimdallr 1.07alpha2

安定版はHeimdallr 1.06です。

1.07alpha1→1.07alpha2の変更点は以下の通りです。

  • init.xmlを強化し、デフォルトスキンや複数のビューを設定できるようにしました。OEM版Heimdallrを比較的簡単に作れるようにする仕組みです。
  • ビューに記事が表示されてないときのビューの位置を変更できるようにしました。普段は何も記事が表示されていないビュー向けの機能です。記事があるウィンドウの位置を最上位にし、記事がないウィンドウの位置を最下位にすると、巡回しているサイトが更新されたときにポップアップウィンドウの如く飛び出してきて便利です。なお、常時記事があるビューに対しては機能は役に立ちません。
  • Win9xでも起動するようにしました。1.07alpha1はWin9x上では起動しなかったので、起動するようにしました。但しWin9xではFeed Protocolが使えないという制限があります。

今回の変更のメインはinit.xml強化です。

init.xmlの仕様

init.xmlを強化してどんな良いことがあるのかと言いますと、Heimdallrのカスタマイズ版、通称OEM版Heimdallrを簡単に作ることができるようになります。

つまり、
スキンとinit.xmlを作成し、Heimdallrのinit.xmlとスキンを置き換えて、別の名称のソフトとしてリリースすることが誰でもできるようになります。

おっと、リリースするのはまだ待って下さい。

というのも、
Heimdallrの中には、私が開発したものではないライブラリやスキンが含まれています。
これらはあくまでHeimdallrで使うために著作権者から許可を頂いているのであって、OEM版Heimdallrで使うために許可を頂いているわけではありません。OEM版Heimdallrでこれらのライブラリやスキンを使うためには、著作権者から別途使用許可を頂く必要があります。

どのファイルの著作権が誰にあるかというのはreadme.txtに書いてありますので、今すぐOEM版Heimdallrをリリースしたい方(はいないような気もしますが)は、readme.txtを熟読の上、しっかりと判断してOEM版Heimdallrを作成して下さい。

そのうちOEM版Heimdallrを簡単に作成するためのガイドラインを書こうとは思っていますが、これはしばらく先になりそうです。

ちなみに法人利用歓迎です。商用利用でも何でも良いです。ご自由にビジネスにお使い下さい。使い物になるかどうかはまったく保証しませんが。
でもたぶんビジネスに使えるソフトは無いかと探している人はたぶんこんなサイトは見ないでしょうね・・・

2004年10月27日

Feed Protocolの便利な使い方

今回の記事はFirefoxブラウザのユーザ向けの記事です。

Heimdallrは、1.07alpha1でFeed Protocolに対応しました。
Feed Protocolとはなんぞや?という話はさておき、一体何ができるのか?ということを書いてみます。

最初に、以下のソフトをインストールしておきます。

上記ソフトのバージョン番号は私が試したバージョンです。
これより新しいバージョンであれば同じようなことはできると思いますが、下記の画像とは異なる結果になるかもしれません。

また、今までFirefoxの拡張機能を導入したことが無い人はFeed Your Readerのインストールでちょっと戸惑うかもしれません。Feed Your Readerの導入方法がさっぱり分からない人が居ましたらそこも詳しく説明しますのでコメント下さい。

準備ができたところで、まだHeimdallrを起動していない人は、起動しましょう。
起動したら、タスクトレイのアイコンからシステム設定を選択します。

まずはFeed Protocol登録ボタンを押します。
システム設定画面

確認用の画面が出てきますので、OKボタンを押しましょう。
確認画面

Feed Protocolの登録が終わりましたので、OKボタンを押してシステム設定画面を閉じます。
システム設定画面

以上の作業は、もう二度と行う必要がありません。
重要なのは、何度も繰り返すことになる以下の作業です。

では、このサイト(MASATOの開発日記)をFirefoxで開きましょう。
今Firefoxで見ているよっていう方はそのままで良いです。

Firefoxの画面の右下の方にこんな感じのアイコンがあります。
RSSアイコン

MASATOの開発日記に限らず、RSS対応のサイトはこのアイコンが表示されることが多いです(表示されないこともあります)。

このアイコンを左クリックすると、以下のメニューが表示されますので、「RSSをライブブックマークに追加」を選択します。
登録メニュー

ライブブックマークに追加を選択しましたが、本当にライブブックマークに登録されるわけではありません。ここでFeed Your Readerが働き、ライブブックマークの代わりにHeimdallrに登録されます。

こんな感じでHeimdallrへの登録用の画面が出てきたら成功です。
Heimdallr登録
おめでとうございます。

ここでOKを押せば本当にHeimdallrに登録されますが、これは練習ですのでキャンセルしておきましょう。

MASATOの開発日記以外の他のサイトでも、右下にRSSのアイコンがあればこんな感じで登録できます。
結構便利だと思うのですが、どうでしょう?

2004年10月24日

Heimdallr 1.07alpha1リリース

Heimdallr 1.07alpha1をリリースします。
安定版ではありません。
Heimdallr 1.07alpha1

安定版はHeimdallr 1.06です。

1.07alpha1は、Windows9x系では動作しません。Windows9x系の方は1.06をご利用願います。

1.07alpha1の変更点は以下の通りです。

  • デフォルトウィンドウの位置を最下位から普通に変更しました。最下位ウィンドウは意外と使い難いということにようやく気が付いたので、デフォルトは普通のウィンドウにしました。
  • スキン設定ダイアログが800x600に収まるようにしました。これで画面サイズ800x600でも問題なく動くようになりました。
  • Feed Protocolに対応しました。といってもFeed Protocolを使いこなすのはちょっと面倒なのでそのうち説明用の記事を書きます。
  • デフォルトRSS FeedリストにYahoo!新着情報のRSS Feedを追加しました。
  • ビューの更新中のサイズ変更により更新アイコンが動くバグを修正しました。

システム設定ダイアログからFeed Protocolを有効にできます。
有効にした後、
feed://http://www.sutosoft.com/room/index.rdf
といったリンクをクリックすると、このURLをHeimdallrに登録できます。

しかしこういったリンクって世の中にほとんど無いんです。
よってこれだけではあまり役に立ちません。

Firefoxをお使いの方は、 Feed Your ReaderというFirefox Extensionを使うことにより
多少役に立つようになります。

詳細はまた後ほど・・・

2004年10月23日

VectorでRSS関連の検索結果トップ

VectorライブラリをRSSで検索してみたところ、現時点でHeimdallrがトップです。

過去の記事のHeimdallr普及のマイルストーンである

を達成したことになります。

と言っても、このVectorライブラリの検索結果は、ソフトをバージョンアップすると最下位まで落とされます。

Heimdallrがトップになったのは、Heimdallrが躍進したというよりも、他の有力なソフトがのきなみバージョンアップして最下位まで落ちていった、ということにあるようです。

うーむ喜んでいいのやら悪いのやら。

でも上記Vectorの検索結果は、一応人気順でソートした結果の検索結果です。
バージョンアップすると最下位まで落ちるということは、頻繁にバージョンアップするソフトはいつも最下位周辺でしょう。人気をちゃんと表した検索結果になっていないような気がします。

Vectorにはこのあたりもうちょっと考えて欲しいなぁ。

2004年10月11日

Heimdallr 1.07で実装する機能

次のHeimdallrのバージョンである1.07で何を実装するのか考えてみたいと思います。

Heimdallrに追加する大きな機能は、それそれプロジェクト名をつけて、仕様検討を行っております。
プロジェクトには、SkinSystemプロジェクトと、WordWatchプロジェクトと、SiteExtensionプロジェクトの3つがあります。

詳細はこちらをご覧下さい。
SkinSystemプロジェクトとWordWatchプロジェクトは、既に保守・拡張フェーズにあり、今後大きな動きがあることは無いでしょう。
残りはSiteExtensionプロジェクト(そのうちChannelExtensionプロジェクトに改名予定)ですが、
これは今設計フェーズにあります。でもまだ設計が終わってないので1.07にはちょっと間に合わないでしょう。

というわけで1.07ではあまり大きい変更を行う予定はありません。
Feed Protocol対応、記事表示順入れ替え現象対応、init.xml強化、といったあたりが主な変更になる予定です。
どれもインパクトは小さいですが、そういうときがあっても良いでしょう。

最後に現状の要望リスト一覧を載せておきます

上に書いてあるものから優先的に実装していきます。上からいくつか実装した時点でバージョン1.07としてリリースします。
実装する際の難易度を難、普、易の三段階で評価し、効果を大、中、小の三段階で評価します。

  • Feed Protocol対応。難易度は難、効果は中。詳細はこちらをご覧下さい。
  • 記事の表示順が入れ替わらないようにする。難易度は難、効果は中。現在、記事を閲覧すると、記事の表示順がひょこっと入れ替わることがあります。これにより、次に見ようと思っていた記事が行方不明になることがあるので、簡単には行方不明にならないようにしたいです。
  • init.xml強化。難易度は普、効果は小。OEM版(?)Heimdallrを作るための機能です。初期スキンを設定したりすることができるようにする予定です。
  • 800x600対応。難易度は普、効果は小。800x600に収まらないダイアログのデザインを変更し、収まるようにします。
  • 記事のプロパティを表示。難易度は普、効果は小。各記事毎の自動学習機能の働き具合などが確認できるようにできると面白そうです。
  • 一度閲覧した記事や、既読にした記事を再度閲覧できるようにする。難易度は普、効果は中。さっき見た記事をまた見たいと思ったときや、既読ボタンで間違えて消してしまったときの救済用です。既読に限らず全部の記事を見ることができても良いかもしれませんね。
  • PC間のデータ移動対応。難易度は普、効果は小。閲覧情報などを簡単に移動できるようにします。自宅と会社でUSBメモリを用いて閲覧情報を共有、ということができるようになります。
  • エラー管理を行う。難易度は難。効果は中。エラーが発生したサイトが存在することをユーザに伝える仕組みが必要です。
  • 大文字小文字を区別しないキーワードを設定できるようにする。難易度は普、効果は小。 大文字小文字を区別しないこと自体はなんとかなるのですが、キーワード設定ダイアログの仕様を決めるのが難しそうです。
  • 表示項目をカスタマイズできるようにする。難易度は難、効果は小。 現在は、サイトの短縮名、記事の日時、記事のタイトルの3つを表示していますが、これの順番を変えたり、一部を非表示にできるようにします。
  • RSS auto-discoveryに対応する。難易度は易、効果は小。 Heimdallrにとっては、RSS auto-discoveryに対応したサイトの(htmlへの)URLを登録するのも、RSSファイルへのURLを登録するのも大差ないので、あまり有難くはなさそうです。
  • ビューのキーワード/非キーワード間にカーニングをかける。難易度は普、効果は小。 現在、ビューに表示されている記事のタイトルのキーワードと非キーワードの境目はカーニングが行われていません。ちゃんとカーニングしておいた方が良いです。といっても実際にはカーニングを行っても誰も気付かないとは思いますが。

2004年10月10日

CEATEC2004に行ってきました

CEATEC2004に行ってきました。

印象に残ったのはSHARPのブース。
20041010_ceatec.jpg

大画面液晶テレビAQUOSの宣伝をするとともにステージ上でダンスを踊る人達。すばらしい。
左端の人がAQUOSの説明をしているんだけれど、みんな踊る人を見ていて誰もテレビを見ていない。(そしてたぶん説明も聞いていない。)
でもAQUOSの名前だけは印象に残りました。宣伝効果はばっちりです。

こんな感じで各所で踊りまくるコンパニオンのおねーさま方を見ていると、
CEATECは、各社が自社の技術をアピールする場というよりも、CMを見ているような気分になります。

たぶん昔は違ったと思うのですが、いつ頃からこんな感じになったのでしょうね。
いやこんな感じが悪いというわけではないです。怪しげな機器の内部構造を見るより踊るおねーさま方を見ていたいですしね。でもこういう機会ですから怪しげな機器の内部構造も見たいとは思うんです。難しいところですね・・・。

2004年10月06日

Heimdallrの技術的に優れた点

Heimdallrの初版がリリースされたのは、2004年1月11です。
その開発開始がいつ頃かと言いますと、大体2003年の8月か9月あたりです。
よって、今日はHeimdallrの開発を始めてほぼ1年になります。
いや正確には1年強なんですが。キリが良いので1年と言うことにします。

開発当初、マルチビュー+自動学習機能を持ったRSSリーダーが欲しいなぁと思って作ったのがHeimdallrですので、自動学習機能を実装した1.06がリリースされた今、Heimdallrは開発当初考えていた通りの姿になりました。

これを機会に、Heimdallrの技術的に優れた点ってなんだろう、ということを考えてみることにします。
といっても「技術的に優れた」というのはなかなか判断が難しい問題です。
何がどうなっていれば「技術的に優れた」と言えるのでしょうか?

実はこの件に関しては比較的客観的な指標があります。それは特許です。
特許を取れるような技術であれば、「技術的に優れた」と言っても問題無いでしょう。

さて、Heimdallrに特許が取れるような技術があるかと言いますと・・・
無いですね。
そもそも、Heimdallrは、私がどこかで見たようなものを繋ぎ合わせてできたソフトウェアなので、私が考えたオリジナルのネタがほとんど無いのです。
優れた知財技術者ならばもしかしたら特許が取れるようなネタを掘り起こせるのかも知れませんが、私にはできそうもないです。

でもあえて言えば、
HeimdallrのGUIの特徴的な要素である既読ボタンの「ドラッグするとまとめて記事が消せる」という点と、自動学習機能とキーワード検索機能を裏で支えている高速文字列マッチング処理は、私の頭の中から生まれたアイデアです。ですのでこれはもしかしたら特許が取れるかもしれません。

しかし、私の頭の中から生まれたアイデアではあっても、たぶんどこかで使われているでしょう。
既読ボタンのようなGUIは、私が見たことが無いだけであって、世の中のどこにも無いとは考え難いですし、文字列マッチング処理も、たぶん正規表現コンパイラのあたりで既に使われているでしょう。

というわけで・・・たぶんHeimdallrに技術的に優れた点はありません。
うーむなんか自虐的な記事になってしまいましたねぇ。やぇやぇ。

でもまだ開発が終わったわけではありません。これからが勝負です。
一年前に考えた姿にはなりましたが、開発中の一年間で思いついたアイデアは、まだ形になっていません。
その中には特許になりそうなアイデアもありそうな・・・ないかも・・・。
でもどのRSSリーダーにも備わっていなさそうな機能のアイデアはありますので、そこらへんを形にしていけたらいいなぁ~と思います。

2004年10月02日

Feed Protocol

暇な土曜日なので調子にのって下書きしておいた記事をほこほこ投稿。

先日紹介したブラウザFirefoxの拡張機能の一つに、Feed Your Readerというものがあります。

どんなことができるのかはこちらの記事が参考になります。
この記事では、HepCatに登録できる旨が書いてありますが、どうやらFeed Protocolというものに対応したアプリケーションであれば何でも良いようです。

でも肝心のFeed Protocolというのが何か分からなかったのでちょっと調べてみました。

どうやら、Feed Protocolを使えば、
feed:http://www.sutosoft.com/room/index.rdf
こんな感じのリンクをクリックするだけで、RSSリーダーにこのRSS Feedを登録する、ということができるようになるようです。但しRSSリーダーがFeed Protocolに対応している必要があります。

以下は、開発者向けのお話です。

Feed Protocolの仕様はこちら(英語)です。で、こちら(英語)がFeed Protocolの拡張仕様です。

アプリケーションがFeed Protocolに対応するための具体的な方法については、こちらの記事が参考になるでしょう。

また、上記Feed Protocolの拡張仕様にFeed Protocol URIの解析手順が載っています。こちらも参考になるかと思います。
しかし、この解析手順、ちょっとバグがあるようなので、修正して日本語訳して書いてみます。

  1. 先頭の"feed:"を取り除きます。先頭が"feed:"では無い場合は、構文エラーです。エラー終了しましょう。
  2. 先頭が"//"であれば、取り除きます。先頭が"//"では無い場合は、特に何もしません。
  3. 文字列の左から右方向へ解析していきます。
  4. "/"(スラッシュ)、"="(イコール)、":"(コロン)、"."(ピリオド)、文字列終端の何れかを探します。
    • "/"が見つかった場合、"/"までの文字列はコマンドです。取り出しましょう。
    • "="が見つかった場合、次の"/"までの文字列は(最後に見つかったコマンドの)パラメータです。次の"/"までの文字列を取り出しましょう。まだコマンドが1つも見つかっていない場合と、次の"/"が見つからなかった場合は構文エラーです。エラー終了しましょう。
    • ":"が見つかった場合、残りの文字列はFeed URLです。全て取り出し、終了です。
    • "."が見つかった場合、残りの文字列はFeed URLです。文字列の先頭に"http://"を追加した後、全て取り出し、終了です。
    • 文字列終端が見つかった場合、Feed URLが存在しないことを意味します。これは構文エラーです。エラー終了しましょう。
  5. この時点でまだ終了していなければ、文字列の先頭は"/"です。"/"を取り除き、4に戻ります。

こんな感じですかね。

ところで、HeimdallrはFeed Protocolに対応しているの?ということについてですが、
今まで私が知らなかったのですから、HeimdallrはもちろんFeed Protocolに対応していません。でも面白そうなので次のバージョンでは対応してみたいと思います。

でもFeed Protocolに対応するようになると、他のFeed Protocol対応アプリケーションと競合してしまうんですよね。そこらへんをうまく問題がないようにやってのけるにはどうすればいいのかなぁ・・・。

Heimdallrのポリシーその2

イチロー最多安打記録達成おめでとう。

まあそれは置いておいて。
以前書いたHeimdallrのポリシーというエントリが微妙に反響があったので、調子にのって他のポリシーも書いて見ます。

以下のポリシーは、Heimdallrのポリシーというより、私が開発するフリーソフトのポリシーといった感じのものです。

インストールは簡単にすること
インストールは、ユーザが行う最初の作業です。
これが大変だと、ユーザはそこでソフトを使うことを諦めて次のソフトを試します。
だからインストーラーを付けてインストールは簡単にしたつもりです。
インストーラーも「次へ」ボタンをぽちぽち押していくだけで適切な設定でインストールされるようになっている・・・はずです。たぶん。
古いバージョンに対する上書きインストールもそこそこ拘りました。マイドキュメント\SutoSoft\Heimdallrフォルダにあるような、設定ファイルのフォーマットは、時々変わっていますが、Heimdallrは、古いフォーマットからの変換を行うプログラムが組み込まれているので、どんな古いバージョンに対しても上書きインストールして問題が無いはずです。

開発を停止しても問題がないようにすること
Heimdallrは私が定期的にメンテナンスしなくても問題が発生しにくいように設計しています。定期的なメンテナンスが無ければ、開発を停止しても問題は発生しにくいからです。
例えば、私が管理しているサーバ(www.sutosoft.com)に一切依存しないようにしています。サーバと連携するようなサービスを提供することは不可能ではないのですが、そのようなサービスを提供してしまうと、永遠にサーバを維持しなければならない(これは定期的なメンテナンスが必要になる)という呪いが降りかかってきてしまいます。
他のサーバにも深く依存するようなことはありません。RSS Feedを提供しているサーバが潰れたらそのFeedの情報は更新できなくなりますが(これはどうしようもありませんでした)、他のFeedには影響がなく、またユーザにより取得できなくなったRSS Feedを切り捨てることもできます。ですので、どこかのサーバが潰れたり復活したりすることがあっても、私がHeimdallrを修正する必要はありません。

個人情報はできるだけ集めない
私が収集している個人情報は、Heimdallrをダウンロードした人のIPアドレスだけです。早い話がWebサーバのログです。
個人情報を集めると、それを守らなければならないという呪いが降りかかってきます。会社組織ならともかく、へたれ技術者の私では守れるはずもありません。よって、何も集めないことにしました。
Heimdallrに、Heimdallrリリース案内RSS Feedがデフォルトで登録されていないのも、「現在Heimdallrを使用している人のIPアドレス」という個人情報を集めないためです。
でもユーザ数位は把握しておきたいんですけどねぇ・・・難しい・・・。

Heimdallr 1.06リリース

Heimdallr 1.06をリリースします。
安定版です。
Heimdallr 1.06
Heimdallr 1.06ソースコード(Visual C++.NET 2003用)

1.05aからの大きな変更点は自動学習機能と猫スキン4点の追加です。

詳細な変更点は以下の通りです。

  • 記事の上にカーソルを移動しても強調されない場合があるバグを修正しました。
  • OPMLファイルの互換性が向上しました。
  • エクスポートを行った後、終了すると強制終了するバグを修正しました。
  • 概要ウィンドウにタイトルを2行分表示するようにしました。
  • 概要ウィンドウがタスクバーに表示されないようにしました。
  • スキン設定ダイアログのスキン名表示順を調整しました。
  • 記事にキーワードが大量に含まれていても優先度をあまり上げないようにしました。
  • スキンファイルの場所をexeファイルが存在するディレクトリを基準しました。
  • 記事の更新日時を細かく見て優先度を付けるようにしました。
  • 最新の情報に更新中にサイト設定を変更すると強制終了することがあるバグを修正しました。
  • 他のアプリで全画面表示を行ったときに透明スキンの文字表示がずれないようにしました。
  • 既読ボタンの色を変更できるようにしました。
  • 記事のソースを示す情報があるときは、その情報を表示するようにしました。
  • 最新の情報に更新したとき稀に強制終了するバグを修正しました。
  • 既読情報及び各記事の情報を一定間隔で保存するようにしました。
  • 自動学習機能を追加しました。
  • ペイントスキンにリピート表示機能を追加しました。
  • 猫スキンを4点追加しました。
  • 最新の情報に更新した直後に数秒固まる問題を改善しました。
  • 最新の情報に更新すると稀に強制終了するバグを修正しました。
  • 最新の情報に更新中のビュー設定変更により更新アイコンが消えないバグを修正しました。