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

 当ウェブサイトで公開しております「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」は本来業務用として開発されたヘッドフォンですが、その音質の高さや解像度の高さから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というわけにはいきませんでした)

新年のご挨拶

| コメント(0) | トラックバック(0)

 大変遅くなりましたが、この場を借りて新年のご挨拶をさせて頂きます。

改めまして、新年あけましておめでとうございます。

 あいかわらず去年の11月頃から体調不良が続いており、パソコンに触れるのもつらい状況になっております。
めまい+耳鳴り+目の前が不意に一瞬暗くなる意味不明な症状、のトリプルコンボに悩まされており、特に耳鳴りはセミが鳴くような音が延々と鳴り続けていて鬱陶しいことこの上ないです。周りからは病院に行くように勧められていますが、恐ろしい病名を告げられるのが怖くてまだ病院には行っていません。(実は私の身内が数年前に同様の症状を訴え、病院で検査したところくも膜下出血の前兆、と言われ大至急手術をして一命を取り留めました)

 さて、今年の抱負ですが何よりも

「万人に役に立つフリーソフトやWebサービスを作りたい」

というのがあります。

 といいますのも、私が製作し自身のサイトで公開しているソフトウェアやWebサービスはパチスロプレイヤー向けだったり、Visual Studioユーザー向けだったり、アフィリエイター向けだったりと、特定の人間には需要があるものの、万人にはほとんど必要のない物であるからです。ところが世の中には老若男女が楽しめるソフトウェアが山ほどあり、私もそのような物を作ってみたいと常々思っておりましたが、まったく以て良いアイデアが浮かびませんでした。
 そこで、何かしらのアイデアが閃いた際には、是非ともそれを形にすべく頑張りたいと思います。また、同時にiOSのプログラミングも勉強したいと思っています。

 なお、去年はこのブログはコンデンサの交換の事ばかり書いておりましたが、今年は音楽活動のほうに力を入れますので、そちらの分野でもすこしでも皆様の役に立てるような記事がかけたら良いな、と思っておりますので、何卒応援の方をよろしくお願い申し上げます。

 ネットをブラブラ見ていたら、MSXパソコンの組み立てキットなるものを発見しました。
しかも、MSXというから古い商品かと思いきや現役の商品だそうです。

http://www.offshore-ww.com/gr8bit-top.html

 MSXとは1983年にマイクロソフトとアスキーにより提唱された8ビットパソコンの規格で、当時ソニーや松下、三菱、日立などからMSX規格のパソコンが発売されていました。

 実は私がコンピュータと出会い、プログラミングにハマるきっかけとなったのがサンヨーのMSX2+で、走査線割り込みからプリンタポートによるMIDI演奏まで、出来ることはやり尽くしました。私がMSXと出会っていなかったら今現在こうしてコンピュータでプログラムを作ったり音楽を作ったりはしていなかったでしょう。

 ただ、心残りなのは、私が当時プログラム雑誌(ベーマガやMSX-FAN)に投稿したプログラムが何一つ採用されなかったことです。無念。

 ちなみに、15年ほど前、私はとある同人ソフトサークルに所属しており、こちらのページでいくつも紹介されているMSXの同人ソフトのとある作品(3つぐらい)の開発(音楽と自分のコーナーのプログラム)に携わりました。実は今もそのディスクを所有しているのですが、今改めて見てみると中二病全快で・・・恥ずかしい・・・。

さて、このキット、GR8BITという商品だそうで、ロシア人による開発だそうです。

 このように箱を開けると、必要な部品がバラバラに入っており、自分で半田付けなどを行って組み立てるキットになっています。

gr8box_open.jpg

 そしてこれがメインボード。CPUは載っていません。しかしこのメインボードはATX規格になっており、ATX電源コネクタまで搭載しています。

gr8bit_main_board.jpg
そして、こちらがCPU基盤。これをメインボードに差して使うようです。Z80が載っています。

gr8bit_cpu_board.jpg
 こちらはVDPが載っているボード。V9938というVDPチップが載っています。今のパソコンでいうビデオカードに相当するボードですが、能力的には天と地以上の差があります。

gr8bit_video_board.jpg
各種基盤を組み立ててATXケースに組み込んだ所。

gr8bit_proto.jpg
ちゃんとMSXのゲーム(メタルギア)が動いています。すごい!

gr8bit_metal_gear.jpg
気になるお値段は、4万2500円! 今の時代で考えると高いですね・・・。
詳細なスペックはhttp://www.offshore-ww.com/gr8bit-2.htmlに掲載されています。



 突然のお知らせですが、コンデンサの交換サービスの新規依頼の受け付けを以下の理由によりしばらくお休みさせていただく事になりました。

  • 大人の事情(安い料金で行っているが故に同業者からの圧力が凄かった。)
  • 本業がちょっと多忙になってきた(最近は昼10時から夜8時ぐらいまで自宅で作業して、夜10時から翌朝4時ぐらいまでスタジオに籠もってます)
  • 体調不良。
ただし、以下の条件に当てはまる方は引きつづきご依頼をお引き受け致します。

  • 以前私にご依頼を下さったことがある方、もしくはその紹介で私を知った方。
  • 開始当初から現在まで定期的にDELLマシンのコンデンサの交換のご依頼をくださっている法人の方。
  • 過去にお取引をしたことがある法人や自営業者の方で今後もコンデンサの交換の必要性が見込まれる方。
なお、現在引き受けている案件に関しましては責任を持って最後まで行わせてて頂きます。

 誠に勝手ではありますが、ご理解を頂ければ光栄です。また、今までにたくさんのご依頼をいただき、また「動かなくなったPCが動きました」等のありがたいご報告もたくさん頂きました。本当にありがとうございました。


 一部の方には「デスクトップGOGOランプ」という愛称で親しまれている拙作フリーソフトウェア「I'm Jugglamp EX」が本日バージョン2.1.5へとバージョンアップしました。

 前バージョンからの変更点は、シミュレート対象機種に「アイムジャグラーAPEX」と「ミラクルジャグラー」が追加された事です。その他の機能追加などはありません。

ImJugglampEX.png

ダウンロードはI'm Jugglamp EXのページから。

 今後は、徐々にバージョン2.1.X系統をフェードアウトさせていき、2.2系統をリリースしたいと思っていますが、それに伴う機能追加で、あまりにも大量のコードを一人で書いている状況で、切羽詰まっております。(現在でもソースコードが2万行ほどあります)

 実のところ、Jugglampシリーズは元々自分のパチスロの立ち回りの研究のために書き始めたソフトなのですが、現在自分自身がパチスロを打つ時間がほとんど無くなったこともあって、(自分のために作ったソフトにもかかわらず)もう自分にはほとんど必要のないソフトとなってしまいました。しかしながら、要望や意見などは頂いており、自分の時間が空いた時に修正を加えたりしている状況です。

 おそらくは、大きな機能追加はバージョン2.2で最後とし、以後は新機種が登場するたびにマイナーバージョンアップ程度に留めていこうと思います。


 今回のエントリは、Dynabook UX/23のBIOSをアップグレードしたところスタンバイ・休止状態に不具合が発生し、結局元に戻すことになってしまった時の記録です。

dynabookux23.jpg

はじめに

このエントリは以下の条件に当てはまる方を対象としています。
それ以外の方はこのエントリを読むだけにとどめておいて下さい。BIOSの更新はマシンを再起不能にするリスクを伴います。

  • Dynabook UX/23(PAUX23JNLBL)を使っている。
  • OSはプリインストールされているWindows XP Home Editionから変更していない。
  • アップグレードしてしまったBIOSを元に戻したい。
なお、BIOSの更新失敗による損害についての責任は負いかねます。

きっかけ

 先日のことです。
何気なく東芝のサポートサイトを見ていたら、Dynabook UX/23のBIOSが密かにアップデートされていることに気づきました。
入手してから一回もBIOSの更新を行っておらず、かといって特に不具合も無かったにもかかわらず、ただ単純に新しもの好きの性格が災いして、新しいBIOSを入手しアップグレードしました。

元々のBIOSのバージョンは1.20。これを2.00にアップグレードしました。

スタンバイ・休止状態への移行ができなくなった!

 ところが、BIOSを2.00にアップグレードしてからスタンバイ・休止状態への移行ともに100%失敗するようになってしまったのです。具体的には「スタンバイの準備をしています」の画面で止まったままになってしまうのです。

「これはイカン! すぐに元に戻さないと!」と思った時にはもう手遅れでした。
東芝のサイトには古いBIOSのダウンロードリンクさえ用意されていませんでした。

古いBIOSの入手方法

 こういう時に頼りになるのが海外サイト。毎回思うのですが海外のコンピュータ系のサイトは日本のサイトと比較して情報量が圧倒的に多く、役に立ちます。

 Dynabook UXは海外では「NB200」という名称で知られています。
そこで、「NB200 BIOS」あたりをキーワードにサイトを探していましたところ、以下のサイトを発見し、無事古いバージョンのBIOSを探すことが出来ました。

http://www.notebook-driver.com/toshiba/toshiba-mini-notebook-nb200-windows-drivers/

 ダウンロードしたBIOSはインストーラ形式になっており、このインストーラを起動するとWindowsの一時ディレクトリ(XPの場合、C:\Windows\TEMPが多い)にWinPhlashというユーティリティと共にBIOSが展開され、そこからWinPhlashが起動するようになっています。 

BIOSのダウングレードができない

 ところが、いざBIOSの書き換えを行おうとすると「既に新しいBIOS(2.00)が入っているから古いBIOSには書き換えられない」との警告が出て終了してしまいます。

WinPhlashの設定を書き換えてみる。

 実は、後に色々試行錯誤していてわかったのですが、WinPhlashの設定を書き換えるだけで無事に古いBIOSにダウングレードすることができましたのでその方法を書きたいと思います。

まずはWinPhlashが展開されたフォルダを探します。
WinPhlashのフォルダは大抵のケースではWindowsの一時ディレクトリに展開されます。(C:\Windows\Temp\)

winphlash_directory.png

WinPhlashが展開されたフォルダにある「WinPhlash.ini」を開きます。 
次に、Advanced = 0;と書かれている部分を、Advanced = 1;に書き換え、そのまま上書き保存します。

Editing_Winphlash_Ini.png

WinPhlash.iniを保存後、改めてWinPhlash.exeを起動するとウィンドウに「Advanced」というボタンが現れます。

Advanced_Setting.png

このボタンをクリックすると表示されるオプションの中の「Flash only if BIOS version is newer than system」という項目のチェックボックスをオフにします。

Advanced_Options.png

この状態で改めてBIOSの書き換えを行うと古いバージョンでも書き込むことができます。

BIOSの書き換えが終了するとコンピュータが再起動します。私の所ではシャットダウン中にフリーズしてしまいましたが、電源ボタン長押しで一度電源を切り、改めて電源を入れ直したところ無事起動しました。

Dynabook UXは素晴らしいプロダクトだと思う。

 私は普段はメインマシンにデスクトップを使っているのですが、静かな場所で物書きやちょっとしたプログラミングをしたいとき、また、市内のリハーサルスタジオでボーカルやギターの録音を行うときにこのDynabook UXを持って行っています。

 CPUがAtomでDAWなんかできるの!? と思うかもしれませんが、あらかじめ自宅のMacでミックスダウンした伴奏の上にギターやボーカルを録音する程度の処理ならわりと普通にこなせます。

 また、バッテリーが意外とタフで、入手してから相当使い込んだはずなのにまだ2時間程度は持ちますし(カタログ公称値は4時間。6セルバッテリを使えば10時間)、キーボードの感触も打ちやすくて好きです。

 現在はタブレットが徐々に主流になりつつあり、ネットブックの出番はなくなりつつありますが、それでも

  • 10インチ程度の画面を持ち、
  • Windowsのアプリケーションが動き、
  • キーボードがついている
  • 重量もそれほど重くない
等、メリットは大きいです。

 ただし、ネットブックなだけあって画面解像度が1024×600ピクセルと狭く、多くのウェブサイトを閲覧する場合にはスクロールを多用しなければなりませんし、実のところDAWソフトを使うのにも画面は狭いです。その辺はポータビリティと性能のトレードオフといったところでしょう。

 私的にはネットブックに(キーボードが付いたまま)タッチパネルが付いたら最強なんじゃないかと思います。

 今回のご依頼は、DELLのハイエンドワークステーション「Precision Workstation 650」のマザーボードのコンデンサの交換です。この機種は2004年発売の機種で、Xeon CPUをデュアルで搭載するハイスペックマシンです。

 ハイエンドワークステーションだけあって、コンデンサの搭載量も多く、またマザーボードも大きいです。

依頼者様曰く「PC自体はここ一年、徐々に立ち上がりづらくなりました。現在は電源を入れてもBIOS表示されない状況です。MACアドレスの関係でM/B交換はできない状況ですのでコンデンサ交換をして頂けると非常に助かります。」とのことでご依頼を頂きました。

今回交換するコンデンサは以下の38本になります。

赤:6.3V 2200μF φ10 緑:6.3V 1800μF φ10 水色:16V 1800μF φ10 黄色:6.3V 1500μF φ10 紫:6.3V 820μF φ8

IMGP1247.jpg

 漏れているのは主にニチコンのHMです。コンデンサのスリーブの刻印を見てみますと2002年製造だということがわかります。この時期のニチコンHMはとにかく漏れやすく、私の所へ来る依頼のうちDELLのマシンでは例外なく漏れているコンデンサの一つです。

IMGP1248.jpg

日本ケミコンKZGも早期に漏れやすいコンデンサの一つ。こちらももちろん交換対象にします。

IMGP1249.jpg

 CPU周辺に多数あるコンデンサ。電力消費量が多いXeonを2基搭載しているだけあって、コンデンサの数もそれなりに多いですが、こちらは主にルビコンのMBZが使用されており、液漏れは見られませんでした。しかし、負荷がかかる部位であることと使用年数なども考慮してこちらも交換対象にします。

IMGP1251.jpg


まずはじめに、液漏れを起こしていたニチコンHMの軍団をすべてサンヨーWGへ交換。

IMGP1257.jpg

 CPUスロット1周辺の17本を交換。実は奥に見えるヒートシンクの下に3本コンデンサがあるのですが、ヒートシンクの取り外しが基本的に行えないため、こちらの交換は非常に手間が掛かりました。

IMGP1258.jpg

CPUスロット2付近の6箇所。こちらもサンヨーWGへと交換。

IMGP1261.jpg

チップセット付近、5本。依頼者様のご希望により予防処置として膨らんでいないコンデンサも含め交換しました。

IMGP1263.jpg

最後にメモリスロット側の2本を交換して完了です。

IMGP1268.jpg

 本マザーボードは12月11日を以て依頼者様の元へと返送され、動作確認をお願いしたところ、正常に動作している様子の写真を送って頂きました。

IMG_9937.jpg


 私は現在音楽製作とXcodeの勉強用にMacを所持しているのですが、2011年11月現在未だにOSはSnow Leopardです。

 というのも、私がローランドのXV-5050というシンセサイザの音色エディットに使っているXV EditorというプログラムがOS X Lionでは今現在サポートされていないため、アップグレードしたくでも出来ないのです。今回はこの動かないXV EditorをなんとかLionで動かせないかと試行錯誤してみた末の失敗記録です。

OS X LionでXV Editorが動作しないたった一つの理由

 ご存じの通り、OS X LionではRosettaが切り捨てられました。
Rosettaとは、Power PCコードで構成された従来のMac OS XアプリケーションをIntel CPU上で動作させるための機構なのですが、ローランドのXV EditorもPower PCコードで構成された古いアプリケーションの一つなのです。

 つまり、RosettaをサポートしないOS X Lionではどう頑張ってもXV Editorは動かせないのです。

古いOSを入れたくても入れられないのがMac

 実はMacには大きな罠があり、あるモデルにプリインストールされているOSよりも古いOSにはダウングレードできません。
例えばOS X Lionがインストールされて出荷されているMacに以前のバージョンのSnow Leopardをインストールしようとしても出来ません。無理矢理インストールしようとしても弾かれます。

 つまり私が将来的にMacを新調した場合、その時期に登場したOSより古い物はインストールできず、つまりはSnow Leopardもインストールできない、ということになります。

 ということは、動作にSnow Leopardが必要なXV Editorはこのままでは新しいMacでは動かせないと言うことになります。

ならば、無理矢理動かしてみよう。

 私の脳内の声:「Rosettaは廃止されたけど、エミュレータの選択肢は他にもあるよね。ほら、Windowsアプリを他プラットフォームで動かすWineとか」

 というわけで、何もMac用のXV EditorにこだわらなくてもWindows用があるじゃないか、と気づいたためさっそく検証開始です。

 ※私はOS X Lionを所持していないため、実際には「Rosettaが無い」という環境を想定してSnow Loopardで実験を行いました。

WineBottlerという選択肢

 WineBottlerとは、Wineをベースに設定や環境構築をより簡単にしたパッケージで、これを使うとWindows用のアプリケーションを一発でMac用のアプリケーションに変換できるという素晴らしいツールです。実際にWindows用のInternet Explorer等がまるでMacのアプリケーションであるかのように動きます。

 今回はこれを利用してWindows用のXV Editorを無理矢理Mac用に変換してみました。

左のアイコンがWineBottler、そして右のアイコンが実際にWindows用のXV EditorをMac用に変換してみたもの。

winebottler.png

動くことは動いたのだが

 早速WineBottlerを使ってMac用に変換したXV Editorを立ち上げてみます。

xveditor_launching.png

 ところが、起動してしばらくすると「XV-5050との接続を確認できない」とのエラーを告げるダイアログが表示されます。
このソフトはコンピュータとXV-5050の間でMIDIを使い双方向通信を行い、データの同期や機器の接続チェックなどを行っています。従ってXV-5050が接続されているにもかかわらずこのようなエラーが出ると言うことはMIDIの入出力がうまく働いていないということになります。

xveditor_error.png

 ちなみに、画面上の鍵盤をマウスでクリックするとXV-5050から音が出ましたので、どうやらMIDIの出力のほうは上手く動いているようです。

なぜBoot Campでは駄目なのか

 Wineを使ってうまく動かないのであれば、Boot CampでWindowsを動かしてその上でWindows用のXV Editorを動かす方法が一番確実かもしれません。

 しかし、シンセサイザの音色というのは、単体で鳴らした場合と実際に楽曲を流しながら鳴らした場合では同じ音色なのにずいぶんと違った聞こえ方をします。従って、私がいつもシンセサイザの音色を作る場合には同時にシーケンサーを立ち上げて実際に曲を再生しながら作っていきます。単体でエディタのみを走らせる、ということはめったにありません。そして、私が使っているシーケンサーはDigital Performer、これはWindows版が存在しません。つまりいくらBoot Campで確実にXV Editorが動くからといって私のケースでは残念ながら諦めるしかないのです。尤も、Mac用のDigital PerformerをWindows上で無理矢理動かす手段があれば別なのですが。

結局はRolandの対応待ち

 現在Rolandの公式サイトではMac OS X への対応状況というページに同社のハードウェアやソフトウェアのOS X Lionの対応状況が公開されています。わりと頻繁に更新されているようですが今のところXVに関する情報は全く掲載されていません。結局現在の所はRolandの対応を待つしか無いのかもしれません。ただ、XV-5050はかなり古い機器ですのでこのまま対応されずに終ってしまう可能性も否めません。

それでもすごいWineBottlerの可能性

 今回はXV Editorの使用には至りませんでしたが、それでもWineBottlerを使ってWindows用のアプリケーションがMac用に変換され、実際に動いてしまう様は見ていて感動しました。ひょっとしたらXV Editor意外にも有用な音楽用アプリケーションがMacで動作するかもしれませんし、今後いろいろ試してみる価値はありそうです。

 WineBottlerの入手先はこちら → http://winebottler.kronenberg.org/

 数日前の事ですが、当サイトで公開しているDMMアフィリエイトの商品リンク作成ツールの利用者の方から「今までに比べてリンクの作成に非常に時間がかかるようになった」とのご報告を頂きました。

 今までは遅くても数秒以内に作成できていた物が、早くても10秒以上かかるというのです。

 こちらではしばらくプログラムの変更は行っていませんでしたので、単にDMMのサーバーが重くなっているのではと考えていましたが実は完全に私のミスでした。

何が原因だったのか

 当サイトのDMMアフィリエイトのリンク作成ツールでは、開発言語としてC#が用いられています。つまりは、.NET Frameworkの機能を利用して実装されているということです。

 プログラム中では、ユーザーの問い合わせに応じてDMMのサーバーから実際に商品情報と商品パッケージ画像を取得するのですが、この時に.NET FrameworkのBeginGetResponseメソッドを用いています。実はこのメソッドにちょっとした問題がありました。

 このメソッドはインターネットリソースの非同期要求を開始するメソッドであり、通常このメソッドが呼ばれた瞬間に、要求の完了・未完を問わずに一瞬で呼び出し元に制御が返ってきます。

 ところが、条件によってはBeginGetResponseメソッドから制御が帰らずにスレッドが長時間ブロックされたままになってしまうことがあります。私のツールがリンクの作成に非常に時間がかかるようになったのもこれが原因でした。

どんな条件の時にスレッドがブロックされるのか

例によって、海外サイトを検索していたら次のサイトを発見しました。

webrequest.begingetresponse is taking too much time when the url is invalid
http://stackoverflow.com/questions/1232139/webrequest-begingetresponse-is-taking-too-much-time-when-the-url-is-invalid

要約するとインターネットからのリソースの取得は非同期的に行われるけどDNSの解決なんかは内部で同期的に実行されるから、無効なURLなんかを指定してDNSの解決に失敗したりするとスレッドがその間ブロックされてしまうとのこと。

ところが。
私のプログラムでは無効なURLは指定していませんし、そもそもDMMの商品URLに通常のブラウザからアクセスするとあっという間に結果が表示されます。

しかし、同時にとある事を思い出しました。

 実は数日前にApacheの実行ユーザをWindowsサービスのデフォルトユーザから、セキュリティをガチガチに固めた「Apache」というユーザ変更しました。そして改めて検証してみると、Apacheをデフォルトユーザで起動した場合にはリンク作成ツールは今まで通りの速度で動作するのですが、ユーザを「Apache」に変更すると10秒以上の遅延が発生するのです。

 ひょっとして、ユーザ「Apache」のインターネット接続設定がおかしいのでは?と思い、ユーザ「Apache」でログオンしていみたところ・・・。

 容疑者発見!

internetoption.png

 「インターネットオプション」を開いてみたところなぜか「設定を自動的に検出する」というチェックボックスがオンになっていました。物は試しにこのチェックボックスをオフにして再度リンク作成ツールをテストしてみると、見事に遅延は解消されました。犯人はおまえだったのか。

 参考までに、なんでこのような現象が起きるのかを調べてみたのですが、マイクロソフトの英語版公式リファレンス によると、こんな記述がありました。

The BeginGetResponse method requires some synchronous setup tasks to complete (DNS resolution, proxy detection, and TCP socket connection, for example) before this method becomes asynchronous. As a result, this method should never be called on a user interface (UI) thread because it might take some time, typically several seconds. 

要約:このメソッドは非同期状態になる前に、いくつかの同期タスク(例えば、DNS解決、プロキシ検出、TCPソケット接続等)を完了する必要があり、場合によってはそれらの同期タスクには数秒を要するため、このメソッドはUIスレッドから呼び出されるべきではありません!

 なお、日本語版のリファレンスには載っていませんでした・・・。

まとめ

 というわけで、どうやらスレッドをブロックしている要因はDNS解決だけではなく、プロキシ検出なども含まれるため、「設定を自動的に検出する」オプションにチェックが入っているにもかかわらず設定の検出に失敗したり時間を要した場合には、その間スレッドはブロックされてしまうっぽいです。

 ところで、デフォルトでは「設定を自動的に検出する」はオフになるはずなのですが、なぜオンになっていたのでしょうね。

スポンサード リンク