DMMTool(仮名) for Windows開発状況その2


今回もまた、プログラミングに関する記事です。大変申し訳ございません。

前回のエントリを書いてから、空き時間を見つけては地道に作業を続けておりました。

前回からの改善点は

  • ネットワークアクセスから何から、ありとあらゆる物をマルチスレッド化した。
  • エラー処理の強化

徹底したマルチスレッド化

 前回のバージョンではURLボックスにURLを入力して情報取得ボタンを押すと、すべての情報の取得が完了するまでウィンドウがフリーズした状態になっていました。画像が多い場合、全情報の取得には10秒以上かかる場合もあり、その間ユーザーは何の操作もできずに待たねばならなかったのです。これはすべての処理をシングルスレッドで行っていたため、情報取得が完了するまでメインのGUIスレッドが止まるからです。

 ところが、たくさんある商品の情報を次々と取得したい場合、ある商品のURLを入力し、表示が完了するまで待ち、次の商品のURLを入力し、また待ち、なんてことはかったるくてやってられません。

 そこで、今回はHTMLのスクレイピングから画像の取得まで、すべてをスレッド化し、個別の情報が取得でき次第次々とイベントが発生するように改良しました。発生したイベントはメインのUIスレッドに伝えられ、その度に画面の更新が行われます。この状態でもメインのイベントループが動き続けているため、他の操作を行うことができます。

 おかげで、下の画像のようにたくさんのウィンドウを開いて次々と情報取得を行っても非常にぬるぬるとなめらかに動くようになりました。

dmmtool_overview.png

エラー処理の強化

 シングルスレッドで処理を行う場合、極端な話必要な処理を関数として書けるので、どこかでエラーが発生すればその時点で関数を抜けて処理を中断し、エラーが発生したことをユーザーに告知するだけのシンプルなプログラムで済みます。

 ところがマルチスレッドの場合には話がすこしややこしくなります。

 たとえば平行していくつものスレッドが動いている場合、あるスレッドは正常に完了したが、あるスレッドは途中でエラーが起きた、という状況が起きます。具体的には、複数の画像データをマルチスレッドで平行してダウンロードしていたがある画像のダウンロードだけは途中で失敗した、等のケースです。この場合、あるスレッドで発生したエラーをどのようにメインスレッドに伝えるかが問題となります。.NETではあるスレッドで発生した例外を他のスレッドでキャッチすることができないので、例外が発生した場合にはイベントを発生させてメインスレッドに例外を伝えるということをやっています。

 また、エラーの告知方法も少し工夫しました。

 このツールでは、ユーザーが商品情報の取得を開始して比較的早期に発生したエラー(URLの入力ミスやパッケージ画像が取得できなかった等)はダイアログを表示してその時点で処理が中断されます。

error1.png

 対して、すでに処理を開始してからある程度の時間が経過しており、もうそろそろ処理が終るだろうと思われる頃合いに発生したエラー(サンプル画像を取得中に発生したエラーなど)に関してはダイアログで告知せずにエラーが発生した事を示すアイコンのみを表示し、そのまま続行可能な処理を続けます。これには二つの理由があります。
  • ユーザーを完了まで待たせるだけ待たせておいてエラーで処理が中断されてはフラストレーションになるから。
  • 取得した画像全てがユーザーが必要としている画像となるケースは希であるから、リロードを行うかどうかはユーザーの判断に任せることにした。
error2.png
現時点で搭載している機能

 まだアフィリエイトリンクを作成する機能は実装されていませんが、以下の機能を搭載しています。
1.商品のタイトル、説明、出演者などの情報をテキストとして取得。
2.商品のパッケージ画像(大、小)を取得
feature1.png
3.商品のサンプル画像(大、小、ただしサンプル画像がある場合のみ)を取得
feature2.png今後搭載したい機能
  • お気に入り、履歴など
  • タブを用いて一枚のウィンドウで複数の商品情報を開けるようにしたい
  • 複数の商品のアフィリエイトリンクを効率よく作成できる手段の提供
なお、完成はまだまだ先になると思われますので、今すぐにでもDMMのアフィリエイトリンクを手軽に作成したい!という方は、当サイトで既に公開しておりますWebサービス版をご利用ください。

DMMアフィリエイトリンク作成ツールのWindows版の開発を開始しました。


今日は久々にプログラミングの話題です。

当ウェブサイトで公開しております「DMMアフィリエイトのリンク作成支援ツール」はいわゆるWebブラウザを使ってサービスにアクセスするWebアプリケーションの形になっておりますが、Windows版のツールの開発も開始しました。

まだまだ完成にはほど遠く、公開できる状態にはなっておりませんが、DMMサイトからの商品情報を取得して画面に出力する部分まではうまく出来たようです。Webで公開しているWebアプリケーション版と違い、こちらはサンプル画像の取得もできるようになっています。

dmmtool_win.png

当初、画像を一覧形式にして表示する部分は自前で実装してしまおうかと思いましたが、Windowsに標準で搭載されているListViewの使い勝手が思いの外良かったのでこちらを利用しました。ご覧の通り、画像をグループ毎にまとめることができ、これはWindows XPから実装された機能のようで、Windows標準のエクスプローラなどにも使用されています。おかげで自前で画像ビューアを作る手間が省けました。

explorer.png

技術的なこと

以前にもこのブログで書いたことがあるのですが、Webアプリケーション版のツールはPerlやPHP等ではなくC#で開発されています。従ってこのようにWindows版を作ることもすぐに出来るわけです。

 さらにプログラム内部では
DMMItemInfo item = new DMMItemInfo();
 item.BeginScrape(“DMMの商品URL”);
みたいなことを書くだけで商品情報を取得できるようになっています。
実際に商品情報の取得に成功した後は、
 string hoge = item.Description;
とか、
 DMMPictureInfo hogePicture = item.LargeSamplePictures[3];
みたいな感じで、商品の説明やらサンプル画像が取り出せるようになっています。
さらに、DMM側のサーバにできるだけ負荷を掛けないように独自のキャッシュシステムも構築しています。
ご意見、要望などをお待ちしております。

 私はプログラミングは得意な方ですが、Webデザインに関しては全くの素人で、売れる広告デザインの作り方などはまったくわかりません。そこで、このプログラムがある程度完成したら最初にごく少人数の方にベータテストという形で使って頂き、スタイルシートに関する意見や、プログラムに関する要望などを募集しようと思います。また、このブログのコメント欄などでも、搭載して欲しい機能などの要望を受け付けておりますので、よろしくお願いいたします。

MDR-CD900STで確実に使える変換プラグを紹介します。


ソニーのヘッドフォン「MDR-CD900ST」は本来業務用として開発されたヘッドフォンですが、その音質の高さや解像度の高さからiPod等で音楽をより楽しむ目的でも利用する方が近頃増えています。

ところがiPodなどの機器で使用しようと思った時に、一番のボトルネックになるのはプラグの大きさの違いではないでしょうか。本来なら変換プラグを使えばそのような問題はすぐに解決するのですが、MDR-CD900STの場合はすこし厄介です。

IMG_3333.jpg

ご存じの通り、iPod等のポータブルオーディオプレイヤーを始め、我々の身の回りにはステレオミニプラグを搭載した製品が溢れています。対してMDR-CD900STは業務用故にケーブルの先には標準プラグしか付いておらず、また製品パッケージには変換プラグの類は一切付属しません。

IMG_5169.jpg

そこで、当然のことながらiPod等の機器でMDR-CD900STを使おうとする場合には変換プラグを別途購入する必要があるのですが、実はこれには鬼門があります。それは変換プラグとMDR-CD900STの相性です。

「MDR-CD900STの片方の音が聞こえません!!!」というトラブルの原因の多くは変換プラグの相性です。

不思議なことに、他のヘッドフォンでは何の問題もなく使える変換プラグが、MDR-CD900STでは上手く使えないことが多々あります。そして多くの場合、相性の悪い変換プラグを用いると片方の音が聞こえなくなります。通常、ステレオプラグをモノラルジャックに差すとこのような現象が起きることがありますが、「ステレオ→ステレオ」の変換プラグでもこの現象が起きてしまうのです。私はこれで実際に数本の変換プラグを無駄買いしてしまいました。

そこで、本記事ではMDR-CD900STで確実に使える変換プラグを紹介したいと思います。

ズバリMDR-CD900STで確実に使える変換プラグはVictorから出ているAP-233Aという製品(写真左)です。このほかに、iPod touchをケースに入れて使う場合には、CN-M30-Bという延長ケーブル(写真右)があるとなおベターです。

IMGP1256.jpg

なぜ延長ケーブルがあるとベターなのか

 私はiPod touchをケースに入れて使っていますが、ケースによってはジャック周辺に設けられた穴の口径が小さく、微妙に邪魔になってしまい変換プラグが奥まできっちりと刺さりません。そこで、変換プラグとは別にプラグの根本が細い延長ケーブルが必要になります。

変換プラグのみでは奥まで刺さらない。

IMG_5162.jpg

 というわけで、変換プラグと延長ケーブルを両方組み合わせて使うと下の写真のようにうまく収ります。(ケースは赤いやつから透明な物に変えました。すみません)

IMGP1630.jpg

私は普段はこの方法でiPodを利用しています。さすがに外にiPodを持って行って音楽を聴く場合には付属のイヤホンで我慢しておりますが・・・。

ただし、この方法にもデメリットがあり、変換プラグの本体が微妙に邪魔で持ち運ぶ際に結構鬱陶しいということです。そこでMDR-CD900STをiPodメインで使いたい場合には思い切ってプラグを取り替えるという手もあります。(MDR-CD900STは業務用なのでイヤーパッドからドライバーユニット、プラグに至るまで補修部品を自分で取り替えられるようになっており、中には標準プラグからステレオミニプラグに取り替えてしまう人もいるようです)

まとめ

iPodでMDR-CD900STを使うには若干手間がかかりますが、一度この音に慣れてしまうと他のヘッドフォンには行けなくなります。解像度の高さ故から聞きたくない音まで聞こえてきてしまうという欠点はありますが(その辺のレビューは以前書いた記事をご覧下さい)

ちなみに私は、MDR-CD900STではMP3やAACの音質劣化が目立ってしまって気になるので、お気に入りのCDはすべてApple Losslessでエンコードし直しました。(流石に容量の関係から全部のCDというわけにはいきませんでした)