2004年11月30日

eクルーザーがmixiやGREE対応に

レッドクルーズからeクルーザーというティッカー型RSSリーダーがリリースされていますが、このeクルーザーがmixiやGREEに対応したようです。

eクルーザーでミクシィやグリーの最新情報をチェック!

実はHeimdallrもそのうちmixiやGREEに対応しようと思っていました。
さっくり先を越されてしまいました。

Heimdallrが対応するのはバージョンとしては1.08か1.09、つまり数ヶ月先の予定です。

さて、ここでなんとなくHeimdallr 1.08に追加される予定の機能を予告してみます。
まだ1.07もリリースされていないんですけどね。

Heimdallr 1.08では、ChannelExtensionという機能を追加する予定です。
(昔はSiteExtension)と呼ばれていましたので、このサイトをSiteExtensionで検索すると関連記事が見つかるかもしれません。

ChannelExtensionは、Heimdallrに、RSS Feed以外のデータを表示させることを可能とする枠組みです。
具体的には、ChannelExtension Pluginと呼ばれるDLLを、Heimdallrインストールフォルダ/pluginに置くと、Heimdallrが、そのDLLから取得したデータを表示するようになる、という仕組みを予定しています。

ChannelExtension Pluginの仕様は公開して誰でも作ることができるようにしようとは思っていますが、たぶん誰も作ってくれないと思いますので主なものは私からリリースしようと思っています。

ChannelExtension機能のポイントとなるのは、どんなPluginがあるの?ということだと思います。
色々なPluginを考えています。上記したmixiやGREEの新着情報等を読み込むPluginもその一つです。それ以外のPluginの詳細は、言ってしまって実現できないと恥ずかしいので、本当にPluginがリリースされるまでお待ち下さい。

2004年11月28日

Heimdallr 1.07beta1リリース

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

安定版はHeimdallr 1.06です。

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

  • init.xmlでシステム設定の初期値を決められるようにしました。但し、システム設定の項目の中には最小値、最大値が定められているものがあります。例えば、サイト情報更新間隔の最小値は30分です。これより小さい値にすることはできません。
  • 記事を閲覧しても、記事やサイトの順番が入れ替わらないようにしました。記事やサイトがひょこひょこ動く、という現象が多少は改善されるはずです。
  • 初期のビュー設定時、サイト一覧にURLではなくサイト名を使うようにしました。

本バージョンからβ版になりました。
しばらく使ってみて特に問題が無ければこのままの機能で安定版としてリリースします。

2004年11月24日

Heimdallrで使われているデザインパターン(2/4)

それではHeimdallrにおいてデザインパターンが使われているクラス構成を紹介します。

最初に紹介するのは、Heimdallrのスキン関連のクラス構成です。 ここがHeimdallrにおいてもっともデザインパターンが有効に活用されたところでしょう。

以下にクラス図を示します。
このクラス図は、Heimdallrの本来のクラス構成そのものと完全に一致しているわけではありません。 デザインパターンにあまり関係無い部分は省き、分かり易い様にしてあります。
また、本クラス図を作成したソフトの都合上、CSkin*を返す関数、というのは記述し難かったので、 CSkin*を返す関数もCSkinを返す関数もCSkin&を返す関数も、まとめてCSkinを返す関数として記述してあります。 適当に解釈して下さい。

20041124_designpattern.png

以下、各クラスを順番に説明していきます。

CRankedViewFrame
ビューを管理するクラスです。アプリケーション起動時に、ビューの数だけインスタンスが作成されます。 MFCのCFrameWndから派生したクラスでもあります。
CSkinManager
CSkinを管理するクラスです。スキンIDからCSkinのインスタンスを返すGetSkinメンバ関数を持っています。
CSkin
スキンファイルの各種データを管理するクラスの基底となる抽象クラスです。 スキンに対応するCSkinContextを生成するGetContext抽象メンバ関数を持っています。
CSimpleSkin
シンプルスキンを管理するクラスです。 アプリケーション起動時に、シンプルスキンファイルと同じ数だけインスタンスが作成されます。
CTransparentSkin
透明スキンを管理するクラスです。 CSimpleSkinと同様に、透明スキンファイルと同じ数だけインスタンスが作成されます。
CPaintSkin
ペイントスキンを管理するクラスです。 本クラスもCSimpleSkinと同様に、ペイントスキンファイルと同じ数だけインスタンスが作成されます。
CSkinContext
CRankedViewFrameの描画を行うクラスの基底となる抽象クラスです。 描画を行うためのDraw抽象メンバ関数をはじめ、マウスが動いたときに呼び出されるOnMouseMove、OnMouseLeaveメンバ関数や、 ビューのサイズや位置が変わったときにに呼び出されるOnSize、OnMoveメンバ関数、更新アイコンの表示/非表示を切り替えるShowUpdateIconメンバ関数を保持しています。
CSimpleSkinContext
シンプルスキンの描画を行うクラスです。
CTransparentSkinContext
透明スキンの描画を行うクラスです。
CTransparentTextFrame
Heimdallrの透明スキンは、2つのウィンドウを重ねて実現されています。 1つ目のウィンドウはCRankedViewFrameが管理し、そして本クラスが2つめのウィンドウを管理します。
CPaintSkinContext
ペイントスキンの描画を行うクラスです。

以上で説明したクラス群の重要な役割は、 CRankedViewFrameに、CSkinContextクラスのインスタンスを割り当てることです。 この割り当ては、次のように行われます。

  1. CRankedViewFrameが、ビューのスキンIDを元にCSkinManagerのGetSkinを呼び出して、CSkinクラスのインスタンスを取得します。
  2. CRankedViewFrameが、CSkinクラスのGetContextを呼び出して、CSkinContextのインスタンスを取得します。

本クラス構成において、以下の2つのデザインパターンが使われています。

Abstract Factoryパターン
CRankedViewFrameが、CSkinクラスのGetContextを呼び出して、CSkinContextのインスタンスを取得するところに使われます。
Abstract Factoryパターンの各クラスに対応するクラスは以下の通りです。
Clientクラス
CRankedViewFrame
AbstractFactoryクラス
CSkin
ConcreateFactoryクラス
CSimpleSkin、CTransparentSkin、CPaintSkin
AbstractProductクラス
CSkinContext
ConcreateProductクラス
CSimpleSkinContext、CTransparentSkinContext、CPaintSkinContext
Strategyパターン
CRankedViewFrameの描画処理に使われます。
Stratectパターンの各クラスに対応するクラスは以下の通りです。
Contextクラス
CRankedViewFrame
Strategyクラス
CSkinContext
ConcreateStrategyクラス
CSimpleSkinContext、CTransparentSkinContext、CPaintSkinContext

こうしてデザインパターンを使うことにより、いくつかのメリットがありました。

1つ目のメリットは、スキンの種類を簡単に増やすことができたことです。
デザインパターンを使う以上、このメリットが得られるのは当然です。 透明スキン、ペイントスキンを追加するときに既にこのメリットを享受できましたし、 今後スキンの種類を増やすときにも享受できるでしょう。

2つ目のメリットは、透明スキンのWin9x対応が簡単にできたことです。
Heimdallrでは、透明スキンを実現するためにレイヤード ウィンドウというWin2000以降で追加された機能を使用しているため、Win9xでは透明スキンが実現ません。 そこで、CTransparentSkinクラスのGetContext関数では、OSのバージョンを取得し、Ver.4(Win9x)であればCSimpleSkinContextインスタンスを生成し、Ver.5(Win2000)以降であればCTransparentSkinContextインスタンスを生成するようにしました。 こうしたことにより、CTransparentSkinContextクラスの実装及びテストにおいて、Win9xを一切考慮する必要が無くなり、実装もテストも楽でした。

3つ目のメリットは、重たいスキンやメモリを大量に使うスキンが、他のスキンに影響を与えないように簡単にできたことです。
透明スキンは、レイヤードウィンドウという重たい機能を使う上、CTransparentTextFrameを使ってウィンドウを2枚使っています。しかし、透明スキンを使わなければ、CTransparentSkinContextインスタンスは生成されないため、いくら透明スキンが重たくても他のスキンを使っていれば影響がありません。
また、ペイントスキンは、画像データを保持するためメモリを確保します。メモリを確保するのはCPaintSkinContextなので、ペイントスキンを使わなければ、CPaintSkinContextインスタンスは生成されず、従って、画像がどれほど大きくてもメモリを無駄に消費することはありません。

以上のように、デザインパターンを使うことにより色々と具体的なメリットがありました。
・・・。ということですが、うーむ。本当ですかねこれ。これらのメリットは、デザインパターンだけから得られたメリットもないでしょうし、分析も甘い気がしますし、本気で信じないで下さいねー。
しかしクラス構成を書いた図だけからそのクラス構成のメリットをしっかりと説明するのって難しいですね・・・。

2004年11月23日

Heimdallrで使われているデザインパターン(1/4)

Heimdallrは、C++を用いてオブジェクト指向による開発が行われている、ということに一応なっています。 そして、そこでは様々なデザインパターンが使われています。
本記事のデザインパターンは、GoFのパターンを意味することにします。Abstract Factoryパターンやらなんやらの23個のパターンのことです。

デザインパターンとは何か?ということについてここでは詳細に触れません。 知りたい方は、オブジェクト指向における再利用のためのデザインパターンという本を読んで下さい。Googleで検索しても色々な情報が見つかります。

本記事では、Heimdallrにおいて、デザインパターンが使われている所のクラス構成と、デザインパターンを使うことによるメリットを説明したいと思います。

Heimdallrはソースコードを公開しているので、今回紹介するクラス構成の実装をじっくり見ることもできます。
また、Heimdallrのソースコードセットに含まれているdesign\heimdallr.judeというファイルは、Heimdallr全体の(巨大な)クラス図が記述されているデータファイルで、永和システムから配布されているJUDE/Communityというフリーソフトで見ることができます。
実装の方もクラス図の方も(残念ながら)それほど素晴らしいものではありませんが、デザインパターンがどのように使われ、どのように実装され、そしてそれがどのように働いているのか、具体的な事が全て分かります。

こうして具体例を紹介することで、皆様の今後のソフトウェア設計の参考になったり、デザインパターンへの理解が深まったりするんじゃないかなーーーと少し期待しています。

前置きが長くなってしまったので今回はこれでおしまいです。クラス構成の紹介は次回から行います。

2004年11月21日

英会話のお勉強

先日購入したハードディスク内蔵ポータブルMP3プレイヤーRio carbonを使って、
通勤途中に英会話なんぞを聴いています。

一応一週間続いております。聴いていてもあまり苦にならないので今後も結構続きそうな感じです。
ハードディスク容量が5Gもあるので、簡単な英会話とちょっと難しい英会話を入れておいて、元気なときは難しい英会話、疲れているときは簡単な英会話と使い分けています。

聴いているだけで語彙が増えるのが良いですね。
here we are. after you. hold on please. と言った決まり文句がいつの間にか覚えられています。

今のところ聴いているのが、


の付属CDです。

これらのCDには、日本語訳と英会話がセットで入っているため、ぼーっと垂れ流して聴くだけで日本語とセットで覚えられます。
日本語訳は必須ですね。試しに、日本語訳が無く英語だけのCDを調達して聴いてみましたが、正直さっぱり分かりません。慣れれば平気なのかもしれませんが、しばらくは日本語も入っているCDを中心に聴いていく予定です。

2004年11月17日

KCOMがサービスを終了

私は、masato@mb.kcom.ne.jpというメールアドレスを利用していることから分かるとおり、KCOMというプロバイダを利用しています。

しかしそのKCOMが来年3月末でサービスを終了することになりました。つまり潰れるということです。
インターネット接続サービスにおけるダイヤルアップ・フレッツサービス終了のご案内

何より痛いのが、このメールアドレスが使えなくなってしまうことです。
一応来年9月末まではメールアドレスの利用を継続できますが、それでも9月末で終了です。
これは、あなたの家の電話番号は来年9月末で変わりますと言われるに等しい出来事です。
長いこと連絡が無いけれど連絡手段を失うのも困る人とか結構いるのですがどうしましょうかね・・・
なお、私は数年前からhi-hoを利用しているので、hi-hoのメールアドレスも持っています。masato@max.hi-ho.ne.jpです。今後の公式メールアドレスはこちらにする予定です。

Amazonやらbk1やらメールアドレスを使って登録している色々なサービスも順次設定変更していく必要があるのですが・・・。一体いくつ登録したのか検討も付きません。
こうしたサービスは、パスワードを忘れた場合、登録してあるメールアドレスにパスワードを送付する、という方法でパスワードの更新が行われる場合が多く、パスワードを忘れたままメールアドレスが使えなくなると身動き取れなくなって大変です。

メールアドレスってインターネットにおける名前兼住所になっているんですね。変わるととても大変です。
プロバイダの選択は、価格とかサービス内容よりも、潰れないかどうかで選ぶべきだったかなといまさらながら後悔しています。OCN(ここはたぶん潰れない)が一番だったかもしれませんね。でもいまさらhi-hoからOCNに移るのも面倒ですし、メールアドレスのためだけにOCNに加入するのもお金がもったいないので、当面はhi-hoで行きます。頼むから潰れないで欲しいなhi-hoさん。

2004年11月16日

初めての音楽プレイヤー

Rio carbonという携帯ハードディスクmp3プレイヤーを買いました。
Rio carbon

私は音楽をあまり聴かないので、今までラジカセも携帯CDプレイヤーの類も買ったことがありません。
これが生まれて初めて買った音楽プレイヤーになります。

買った一番の目的は英会話の勉強をすることなんですが、
音楽も聴いてみたいとか携帯ストレージとしても使いたいとか、他にも色々目的はあります。
このプレイヤーは記録容量が5Gもあるため、恐らく私が生涯に聞く曲が全曲入ります(私は生涯に1000曲も聴かないだろうという見込みがあるからです)。さらにその上88gと軽いので、胸ポケットに入ってしまうお手軽さがあります。
Rio Japanがこのプレイヤーを発表したときから欲しいなーと思っていたので、
仕事が一段落したこの機会にさくっと買ってしまいました。

生まれて初めて買った音楽プレイヤーなので他の音楽プレイヤーとの比較なんてできるはずもないですが、なんとなく便利だと思ったことや不便だと思ったことを取りとめもなく書いてみます。

便利だと思ったこと

  • 生mp3(暗号化されていないmp3)がそのまま再生できること。最近の音楽プレイヤーはみんなDRM必須だと思っていました。
  • mp3タグでアルバム名とアーティスト名をつけておけば、アルバムやアーティストを選択して再生ことができる。起動時に全ファイルのmp3タグを検索しているようです。
  • ジョグダイアルによる曲選択が楽。目的の項目を選択するのがカーソルキーより格段に早いですね。
  • 対応ビットレートの幅が広い。WMAは32~192kbps。mp3は16~320kbps。なんとなく高音質にしても全然平気そうです。

不便だと思ったこと

  • 落としやすい。外見を見れば分かるとおり、角が丸くていかにも手が滑りそうな感じです。その上、ストラップ用の穴もないので、手が滑ったときの最後の砦はイヤホンのジャックだけです。イヤホンジャックはしっかり刺さるので、運がよければちょっと位の衝撃では外れません。でも所詮はしっかり刺さっているだけなのでちょっと振り回せばすぐ外れて吹っ飛んでいくでしょう。また、イヤホンにリモコンが付いてないので、一曲スキップや一時停止の際も本体を操作する必要があります。ますます落としやすいですね。
  • データストレージとしては使い難い。USB端子がMini-Bなので、普通のパソコンに備え付けられているA端子と繋ぐためには変換ケーブルを持ち歩く必要があります。面倒ですね。
  • ポケットに入らない。というのも私の胸ポケットには、携帯電話と名刺入れが既に入っており、いくらRio carbonが軽くて小さくてもこれらのものと同時には入らない、ということです。いやRio carbonは全然悪くないんですけどね。

総括すると、Rio carbonは、落としやすいところは気になりますが、音楽プレイヤーとしてとても便利に使えます。生mp3が再生できるというのが一番のポイントですね。USBマスストレージクラスに対応しているので、USBでさくっと接続して、さくっとmp3ファイルをコピー。これで転送完了。本体も落としやすいという点を除けばジョグダイヤルで操作もお手軽。これで音楽が少し身近になるでしょう。

あっそういえば主目的は英会話でしたね・・・。一応何か入れておかないと・・・。

2004年11月06日

いつか言ってみたいこと

いつか言ってみたい台詞の備忘録。

君も技術者ならば技術用語を一切使わずに技術を説明してみたまえ。
いやー技術者ならばこれができないとね。でも私できないんですよ・・・。難しい・・・。

バグ報告は要らないからバグを修正したソースコードを下さい。
テスト担当者にいつか言ってみたい台詞。でも大抵バグ見つけるのは自分なので何も言えないんですけどね。

動かざること山の如し。
どうInputを与えても何もOutputを返さないLSI(の開発担当者)に向けて言う言葉。

あれ、ここに書いちゃったら言ったことになるのかな・・・。