HTC 7 Surround を買いました&初期不良交換でどたばた

少し前の話になるのですが、AT&T版の HTC 7 Surround を購入しました。

もの自体はすばらしかったのですが、見事に初期不良を引いてしまい、ごたごたしました。その顛末を記してみようかと思います。

どうしてSurroundに?

やはり、横にスライドするとか余計なギミックがなんとなくハートを射止めた感じです。

周りがTrophyやHD7を買っていく中、せっかくだから他の人が持っていないものがほしいと思っていたところでもあったのですが、SIMフリー版はなかったので、そのときは「Surround買えるなら買う」と言いふらしていた感じでした。

購入、そして到着

そんな中、HTC HD7を自分でアンロックしました [更新あり] - ななふぉをみて、AmazonWirelessから転送業者経由で個人輸入してSIMアンロックという方法を知ったので、同じ方法でAmazonWirelessのサイトからReplacement Phone(電話本体のみ)を購入しました。$469.99でした。

注文したのが11月28日、発送が11月30日。その後転送業者に12月2日に到着、転送業者の元から翌日発送され、手元に12月8日に到着しました。

Expansysなどが6万円を指す中、4万円台で収まってお得!このときはそう思っていました。

記憶喪失の電話

しかし、早速電源を入れてみると動作がおかしい。初回起動したのに初回起動画面があがってこない。怪訝に思って再起動してみるとようやく初回起動に。

しかしその後も謎の再起動を繰り返し、再起動してくると完全な初期状態に戻ることがありました。この時、phone information を見ると10GB以上あってしかるべきTotal Storage が 50MBくらいしか認識されていない。しばらく再起動を繰り返すとデータは元通りに復活してくることから、ストレージとして接続されているmicroSDが壊れているものと判断しました。

「Windows Phone 7はmicroSDの相性がシビアで、カードの交換がサポートされていない」とはよく言われていますが、その中でも大ハズレのカードを引いてしまったようです。

また、SIMアンロックはななふぉさんで紹介されていたサイトではSurroundに対応していなかったので別のサイトで申し込んだところ、全く返答なし。こちらでもハズレを引いてしまいました。

交換の交渉

AmazonWirelessの交換の説明を読んだところ「まずは電話してね!」と書いてあったのですが、当然国際電話、英語になってしまいます。Global Summit であうあう言ってた記憶が思い出され、手振り身振りでやっと突破していたところを会話だけでなんて無理...泣き寝入りしかないのか...とTwitterで嘆いていました。

が、全体的なサポートの窓口はあるんじゃないかとContact Usを見てみたらカスタマーサポートのメールアドレスを発見。早速状況を書いて、「電話できないんですけど」と書き添えた上でメールで問い合わせ。

すると、ものの3時間しないうちに「ごめんね。新しいの送ったよ!」とメールが!はや!!

同時に転送業者にも問い合わせていたのですが「交換品など、商品に価値がないものはEMSでないと発送できない」とのことなので、オプション発送のEMSを選択。宅配業者を使うよりちょっと転送料が上乗せされます。

返送に四苦八苦

代品の発送と同時に、返送用ラベルが送られてきたのですがアメリカ国内のみの対応。さらに問い合わせてみると、「日本から返送するならそっちで送料持ってね」とのこと。

で、携帯電話の発送はリチウム電池の航空機搭載制限でひっかかってくるのでいろいろ面倒だという話を、同じく初期不良引いてしまった初音さんに聞かされました。ググってみると、Kindleを輸入して不良引いた人達が結構困っていたようで(Amazon Kindle返品に悪戦苦闘。 - flamingoのひとりごと)、みなさん最終的にUPSにたどり着いていました。

集荷に来てもらうのは深夜しか家にいないので無理。よって行ける範囲の営業所を探してみると、通勤経路にMAIL BOXES ETC 大阪岶尾店を発見。終業後持って行って「携帯電話なんですけど送れますか?」といったらすんなりOK。書類を書いてさくっと発送完了しました。

が、その送料がすごかった。0.5kgで11,088円…。EMSで送れば1,500円で済むところがこのお値段です。辛い…。

で、結局どうだった

すでにカードの請求が一部確定していて、かかったお値段もしっかり判明してきました。初期不良交換にかかった費用を考えると逆に高くつく結果に…。ぐすん。

HTC 7 Surround 本体 $469.99 ¥40,234
転送料(宅配業者使用) $32.00 ¥2,737
関税 ¥1,700
SIMアンロック(ハズレ業者) $9.99 ¥854
何もなければ ¥45,525
転送料(EMS使用) $46.73 ¥3,997
返送料(UPS) ¥11,088
SIMアンロック(今度はちゃんときた) €35 ¥3,971
追加でかかった費用 ¥19,056
トータル ¥64,581

また、T-MobileはHTC HD7で英語のみサポートか? どうなる日本語 [更新有り] - ななふぉ*1で書かれていた「T-Mobile版HD7は英語しかサポートしない」問題は、AT&T版Surroundでも同様でした。おいおいそこはキャリアにコントロールさせちゃいけないとこだろ。何考えてるんだ!って感じ。

そういうわけで、転送業者を使っての現地版入手は初期不良の問題もあるし将来的な言語サポートの問題もあるのでおすすめしません。今WP7を買うだけでもハイリスクなので、おとなしく Expansys とかで買う方が安全だと思います。

*1:その後の更新で、開発スケジュールの問題であったと書かれていますが、キャリアがコントロールできるという点は変わっていないので、アジア言語のサポートとか向こうからしたらどうでもいいと考えて切ってくる可能性はぜんぜんあります。

WebBrowserTaskのバグ回避のためにBASE64でリダイレクトできるものをつくった

2011/02/12(Sat) 追記

この問題はWebBrowserTask.URLに渡すURLを事前にエスケープしておかなければならないという仕様でした。よってこの記事の方法を採用する必要はありません。

詳しくは、以下の記事をご覧ください。

WebBrowserTaskに渡すURLはUri.EscapeDataStringしておく必要がある - backyard of 伊勢的新常識

BASE64にしたURLでリダイレクトできる b64redirect.iseteki.net を作りました。使い方は簡単。http://b64redirect.iseteki.net/(BASE64エンコードしたURL) で開くだけです。

こんなもんが必要になった背景ですが、Windows Phone 7のWebBrowserTaskという、内蔵Internet Explorerを起動するクラスのバグがあったからです。

WebBrowserTask には、パラメータとしてURLを引き渡せるのですが、このURLに&を含めると、その&以後がすべて欠落してしまいます。たとえば、こういうコードを書いた場合、エンコーディングの&ie以降が落ちるため文字化けします。

WebBrowserTask task = new WebBrowserTask();
task.URL = "http://www.google.co.jp/search?q=" + Uri.EscapeUriString(searchWordTextBox.Text) + "&ie=utf-8&oe=utf-8";
task.Show();

はてなモノリスなど一部のWebサービスでは、&の代わりに;を使うことにより問題を回避することができるのですが、Googleでは回避できないし、ちまたのURL短縮サービスを使おうとすると、URLを作るためのリクエストをしなくといけなくて面倒だったので、BASE64エンコードなら&も含まないからいいかなーと思ってやってみました。

上のコードはこんな感じで書き直すことができます。

string url = "http://www.google.co.jp/search?q=" + Uri.EscapeUriString(searchWordTextBox.Text) + "&ie=utf-8&oe=utf-8";

WebBrowserTask task = new WebBrowserTask();
task.URL = "http://b64redirect.iseteki.net/" + Convert.ToBase64String(Encoding.UTF8.GetBytes(url));
task.Show();

ご自由に利用して頂いてかまいませんが、このサイトを経由していると言うことだけ書いておいてください。というかWebBrowserTaskさっさとなおしてくれMSー!

小技:GoogleでWindows Mobileの開発について調べるときのキーワードは「WinMo」で

ちょっとした小技です。

Windows Phoneというブランド名がついたとはいえ、既存のWM6.x開発の資産はまだまだWindows Mobileでひっかかる現状ですよね。

WM6.xの開発について調べたいときに困るのは表記揺れ。Windows MobileやらWMやらWinMoやら、人や地域によって表記が若干変わります。そんなときは何も考えずに「WinMo」とキーワード指定して検索しましょう。表記揺れ補正がかかってWindows Mobileも、WMも、WinMoもすべて結果に入ってきます。

Windows Phone 7のゲームはSilverlightでも作れる

Windows Phone 7というと、普通のアプリはSilverlight、ゲームはXNAというイメージがありますが、実際にはゲームをSilverlightで作ることが可能です。

VS2010 for Windows Phone でプロジェクトを作成した際、PropertiesにWMAppManifest.xmlというファイルが一緒に作成されます。このファイルがアプリの配置先などを定義しています。


このファイルにあるAppタグの属性、Genreに対してApp.Gamesと指定するとゲームとして取り扱われ、実機でGame Hubに表示されます。(Silverlightアプリケーションで新規作成するとデフォルトがApp.Normalになっています)

ただ、エミュレータにはGameハブがないので、App.Gamesを指定するとホームから見えなくなってしまいます。

逆にXNAアプリケーションを通常のアプリケーションとして取り扱うこともできるでしょう。

AirMediaPlayerを使うためにBonjour for Windowsのソースをビルドしたまとめ

iOS4から搭載されたAirPlayという、AppleTVとかに再生している音楽や動画を飛ばす機能なのですが、再生先としてWindows PCが使える AirMediaPlayer が公開されました。

Windows を AirPlay対応にする非純正アプリ AirMediaPlayer - Engadget Japanese

が、依存コンポーネント全部最新にしているにもかかわらず「Bonjourがインストールされていない」と表示されます。調べてみると、古いBonjour for Windowsに入っていたdnssdX.dllに依存している様子。

そもそもAirMediaPlayerの実装がまずいよなーと思いつつ、古いものを探すも見つからなかったのでソースからビルドしました。

まず、Appleのサイトからソースをダウンロードします。ソースブラウザが公開されているのですが、tarballとかで落としてくる機能が見つからなかったので、こういうコード書いてがすっと取ってきました。

require 'rubygems'
require 'hpricot'
require 'open-uri'

base_url = "http://opensource.apple.com"
base_path = "/source/mDNSResponder/mDNSResponder-258.13/"

class Downloader

  def initialize (base_url, base_path)
    @base_url = base_url
    @base_path = base_path
  end

  def exec_downloader
    download_dir(@base_path)
  end

  def download_dir(path) 

    relative_path = path[@base_path.length..path.length]

    if relative_path != nil
      puts relative_path
      system("mkdir -p #{relative_path}")
    end

    url = @base_url+path
    doc = Hpricot( open(url).read )

    (doc/:td).each do |td|
      if td.attributes['valign']
        (td/:a).each do |link|
          if link[:href] =~ /^[^\/].+[^\/]$/
            system "wget -O #{relative_path}#{link[:href]} #{url}#{link[:href]}?txt"
          elsif link[:href] =~ /^[^\/].+[\/]$/
            download_dir path + link[:href]
          end
        end
      end
    end

  end
end

Downloader.new(base_url, base_path).exec_downloader

で、このスクリプトでダウンロードするとVBのサンプルが開けないので「Clients\DNSServiceBrowser.VB\My%20Projects」の%20を半角スペースに変更します。

そして、VisualStudio 2008もしくは2010で開いて、ビルドします。デフォルトでx64が選択されているので、32bit OSの人は構成をWin32に切り替えることを忘れずに。エラーが一杯出ますが特に気にしなくていいです。

その後、mDNSWindows\DLLX\{x64,Win32}\Debug に入っている dnssdX.dll を C:\Program Files\Bonjour\ あたりにコピーしておきます。

そして、管理者権限のあるコマンドプロンプトを開いて、regsvr32 dnssdX.dll です。

うちで一番大きい画面でいい音が鳴るスピーカーを持つTouchsmart PCにとばせて満足しました。音楽の方は未対応みたいなのがちょっと残念でした。

2010/12/24(Fri) 追記

id:tmyt に tarball のありかを教えてもらいました。涙目。
http://opensource.apple.com/tarballs/mDNSResponder/mDNSResponder-258.13.tar.gz