2013年4月20日土曜日

お引越し

新しい場所へ引っ越しました。
今までの投稿内容なども移行済みなので、将来的にはこちらのblogは全削除の予定です。

新しいサイトは以下のURLからとなります。
http://od10z.wordpress.com/

お手数ですが、ブックマークなどの変更をお願いします。

2012年12月2日日曜日

夢次元の芸術家(ロック画面の壁紙をアプリから変更する)

 一年ほど前に、WP7でAdventCalenderというイベント記事を書きました。今年もWP8でAdventCalenderイベントがありましたので、参加しております。まだ国内未発売ということもあって、参加者は多くないです。まぁここ最近のネガティブニュース続きでは、中々WP8に手を出してみようとは思えませんものね、仕方ありません。
 ですが将来的にはWP8国内発売の可能性も十分に見込めるので、ボチボチさわりはじめていきましょうか。


 というわけで、2日目担当の僕のお題は
「ロック画面の壁紙をアプリから変更出来るようになったよ!やったねタ○ちゃん!」
 で行きます。(


2012年11月16日金曜日

ヨーグモスの取引

 twitterでもつぶやいておりましたが、西日本側へ出張へ行っておりました。実はその途中で広島にもよったのですが、私事では名古屋までしか西側へ行ったことが無い私だったので、はじめて原爆ドームを見て感動したり。出来れば今度は、ゆっくり観光で行きたいところですねー。

2012年11月5日月曜日

ついえし希望

そういえばひとつ前の記事に載せ忘れてたことがあったので、こっちに記載しておきます。
 
 

2012年11月4日日曜日

入念な研究

ご無沙汰です。
ようやく仕事のほうが落ち着いてきたので、そろそろここの更新もぼちぼち再開していこうかと思います。ここ最近は放置プレイっぷりが半端なかったですからね……。
放置している間にLumia920、820やHTC8X、8Sの発表、。WP8の国内発売延期やOS公式ローンチなど実にさまざまなことがありました。そのたびに歓喜し、絶望し、というさまをツイッター上で晒しておりました。(あと鞄を無くすという醜態も……)
 
そしてこのたび、ようやくWP8のSDKがリリースされました。リリースされて、早一週間。開発者のみなさんはお試しになられたでしょうか?
私は先日ようやくPCをWindows8にアップデートし、SDKがさわれるようになりましたので、今回はそのSDKからエミュを起動し、ざっと目についた新機能について書いていこうかと思います。
SDKの新機能についてというよりも、WP8の新機能について、が中心となっています。
(なお、残念ながらエミュにMSアカウントの設定が出来ないみたいなので、全ての機能を試して確認することは出来ませんでした)


(こっちの記事に載せ忘れたことを、 別記事 に追記しておきました)
 
 

2012年8月30日木曜日

(解決済み)業務連絡:なな字引のエラーについて

(本件はすでに解決いたしました)





 Tango以降のバージョンのWP7で「なな字引」を使用した場合に、アプリケーションが落ちてしまう現象が報告されています。
 当方で確認したところ、タグ検索機能を使うと 入力欄にフォーカスを当てたときやもう一度タグ検索しようとした場合などに現象が発生することが確認できました。

 現在、原因の調査中です。
 修正版を申請し、現在審査通過して公開準備中です9/4再申請中です。
 
 9/11すいませんまた審査落ちしました。再々申請中です。
 ⇒修正版の審査が完了し、マーケットプレイスで公開済みです。更新すればエラーは回避されます。お手数ですが、最新版への更新をお願いします

 なな字引をお使いいただいている皆様にはご迷惑をおかけいたしますが、修正版をマーケットに公開するまでタグ検索機能の使用はなさらないようにお願いします。(コピーするだけなら出来ますが)

2012年7月28日土曜日

絵描きの召使い


 人生ではじめて、有料自作アプリを作成しました。
 WindowsPhone7用ミュージックプレイヤー、「Armeria Sounds」です。


 このアプリ、普通のミュージックプレイヤーとは違った目的を持っています。
 それは音楽と一緒に「画像」も楽しむ、というもの。
 どういうことかと言いますと……普通、ZuneでWP7に音楽を取り込むときは、アルバムアートが設定できます。アルバムアートはジャケット画像でもいいですし何か適当な画像を自分で設定してもいいですね。
 しかし人によっては、思い入れのある曲などに「曲単位」で画像を設定したいときもあるかと思います。私がそうです。私がそうです
 そういうとき、現状のZuneの仕様でそれを実現するにはどうすればいいかというと、その曲だけアルバム名を変更して別アルバム扱いにしたうえで、アルバムアートを設定するしかありません。なんか、イヤです。
 そこで考えたのが「自分でそういうアプリ作ればいいんじゃね?」というわけで、作りました。




 設定方法は上の画像の通りです。わかりにくいでしょう?
 どういうことかというと。





 Zuneからの同期は、上の画像にあるように、Pictureの直下にArmeriaSoundsというフォルダ名が来るようにします。(「ArmeriaSounds」という名前の部分はアプリの設定から変更できます※)





 WP7上からだとこう見えている状態ですね。
 あとは簡単だと思いますが、その下には「アーティスト名」のフォルダを用意し、その中に「曲名.jpg」という画像を入れておけばOKです。



 


 あとは音楽再生時に、Armeria Soundsが画像を探してきて、そいつを背景として表示します。設定されていない場合はアルバムアートを表示します。上の左側の画像が「アルバムアート」を表示している状態で、右側がArmeriaSoundsフォルダ内に入れておいた画像を表示している状態です。


 このアプリを作ってみて、意外と利点になったのは、解像度が高い画像をアルバムアートに設定しても劣化してしまっているのですが、この方法で表示した画像は綺麗なまま表示出来ることと、アルバムアートも拡大して表示できる点ですかね。
 とてもニッチなアプリケーションですが、試用版(※)もありますので、ご興味をもたれた方は是非マーケットからインストールしてみていただけると嬉しいです。


 今回のアプリ作成では色々と勉強になることが多かったです。コーディングについてもそうですが、XAMLに関しても今までよくわからないまま使ってた部分を少し理解できた気がします。あと、さりげなく多言語対応(日本語と英語)してたりします。ここら辺での収穫は、今後の新規アプリだけでなく、既存アプリにもフィードバックしていけたらいいなぁと思います。

※試用版では以下の制限をかけています
 ・設定変更不可
 ・曲の絞込み不可 ←これはただの自分のミスでして、次のバージョンアップで撤廃する予定です


それが黄昏の霧から色を集めることで、主人は世界をより良い色に染めることができる。

2012年7月25日水曜日

モグの狂信者

OD-10Zは自分が正気だと言っている。多分そうなんだろう。しかしWP7狂信者の正気の度合いは、判断が難しいからな。

















 Lumia900、各色を手元に揃えました。(爽やかに)
 Lumia900が、というより現行のWP7機種がWP8にアップデート出来ないことは知っています。ええ、知っていますとも。


 後悔はありません。
 あ、でもLumia900ピンクのグローバル版が出たら、そっちも買う予定です。




わかったぞ! わかったぞ! わか……

2012年6月17日日曜日

祝福されし完成


ついに ねんがんの Lumia900 White with Global Edition を てにいれたぞ!


祝福されし完成をとくと見よ!
ということで、以下開封式のときの写真を貼っておきます。









外箱の写真。
外装はLumia800のものとよく似てますね。ちなみにAT&T版とは大分違います。左がグローバル版で、右がAT&T版のものです。




箱から出して手で持ってみました。
Lumia900は4.3インチディスプレイを搭載しており、ややでかすぎるとの評価が多いですが、私は手が大きいほうなのでこれぐらいのサイズがジャストです。馴染む、実に馴染むぞォォ!







電源ONして初期設定です。
AT&T版のLumia900はキャリア制限により言語が4つほどしか選択できませんが、グローバル版なのでちゃんと日本語も選べます。当然日本語を選択し、再起動します。






初期設定の細かい内容は割愛します。他のWPと大差ありませんからね。
強いて違う部分をピックアップするなら上の写真の部分くらいでしょうか。「Nokiaをお選びいただきありがとうございます」とありますが……国内で出てくれないことには本来は選びようがないのが悲しいです。
右の写真は何かのアプリがインストールされています。これは、Nokia独自のアプリがここでインストールされているものと思われます。
Nokia独自アプリと言えば、Lumia800では香港版のLumia800では、Nokia製アプリが使えないという悲しい問題がありました。実は私が入手したこのLumia900も香港版。この、独自アプリのインストールと思しき画面が出ているということは、Lumia900では改善されているのでしょうか?








起動完了。
「Nokiaマップ」と「Nokiaドライブ」のタイルがあることが確認できます。ネットワーク設定もそうです。どうやらLumia900では改善されたようで、一安心ですね。ほかにも見慣れぬアプリが何個かありますが、香港向けのものでしょうか。








Lumia900はテザリングに対応しています。(これはAT&T版もそうでした)
残念ながら国内では電波法の関係上使うことは出来ませんが、テザリング対応されているのは実に嬉しいですね。





OSのバージョンは 7.10.8773.98 です。
国内唯一の端末たるIS12Tは 7.10.8107.79 であり、随分と差があります。AT&T版のものですら 7.10.8112.7 です。
気付かれてる方もいらっしゃると思いますが、そう、グローバル版のLumia900は所謂 Tango が搭載されているのです。
……といっても、Tangoの恩恵って何? って言われると、256MB端末への対応がメインなため、ぶっちゃけあんまりないでしょう。強いて言うならば細かいバグフィックスやらメモリ使用の最適化やらでしょうか。現在知っている改善点として目立つものでは、Listboxコントロールが他アプリから戻ってきた直後にスクロール動作がカクカクになってしまう、という問題が解決されていることぐらいですかね。……大きい恩恵でしたねこれ。




以下、主に端末サイズ比較用の写真などになります。




まずは国内ではとてもレアになるであろう写真から。
何がレアって、これ、Lumia900同士の比較写真です。Whiteがグローバル版で、BlackがAT&T版です。こんな比較写真で誰が得するんでしょうね……?
言うまでもないことですが、同じLumia900ですから当然サイズなどは完全に一致です。目立つ違いとしては、Nokiaロゴの位置がちょっと違うのとAT&Tロゴの有無くらいでしょうか。






持っている主な端末と比較しました。
どちらの写真も真ん中にあるのがLumia900です。
上の写真は、左にあるのが「HTC 7 Trophy」で右にあるのが「IS12T」です。こうしてみるとLumia900も存外でかくないように見えますが、それは写真の角度的にそう見えているだけです。下の写真は、左にあるのが「T-01B」で右にあるのが「T-01A」です。もっとも大きいのがLumia900であることがおわかりいただけるでしょうか。








側面の写真です。厚さ比較用。
2枚目の写真ではIS12Tと、手持ちのフリクスさんを比較対象として一緒にうつしています。Lumia900もそんなに厚くないことがおわかりいただけるかと思います。




その他、具体的なスペックや仕様の比較についてはこちらのpocketgames様の記事がわかりやすいかと思います。



いかがでしたでしょうか?
さわり心地や操作感は今まで触れてきたWP端末で最も気に入っており、端末の大きささえ気にならないならば、是非とも購入をお奨めしたい端末です。ホワイトの色合いも実に格好良くてGood!! アメリカでも、Amazonのランク上位に居座り続ける程度には売れているようです。(値段が安かったってのも大いにあるでしょうが、それにしたってレビュー数もかなり多いようで、いい感触のようです)
あとはこれが国内で合法的に使えるようになってくれれば完璧なんですがね……。Nokiaさん、はよ日本に再上陸してください。お待ちしております。


「祝福されし完成をとくと見よ」 ――囁く者、シェオルドレッド

2012年5月15日火曜日

この世界にあらず


 「なな字引」のレビュー欄でも何度か要望を頂いている件について、こちらで回答しておこうかと思います。


・メール送信機能に画像添付も出来るようにしてほしい

 結論から言いますと、残念ながらこの機能への対応は行いません。


 理由としては何点かあります。
 まず第一に、なな字引のメール送信機能は標準で提供されている「EmailComposeTask」を使用していますが、そのEmailComposeTask機能に画像添付の機能が存在しないためです。よって、現状の仕様上、対応することはまず無理です。
 とはいえこれは、Socket通信する処理を自分で作ってやれば解決できます。が、それはやりません。これが第二の理由につながりますが、それやると結構作り変えになりますからです。Socket通信なんて実は書いたことないので、当然開発には時間がかかるでしょう。デバッグもしかり。そこまでして作り変えるほどの必要性があるのか、と思っているわけです。
 最後に、「現状のままでも手間はさほど変わらない」という点です。
 今の「EmailComposeTask」を用いた仕様のままでも、OS標準のメーラー画面に遷移したあとで画像添付することは出来ます。メニューバーにボタンが出てますね。それを押して画像選ぶだけなので、今のままでもいいんじゃないかな?と思ってます。結局画像を選ぶ手間は一緒ですしね。

 というわけで、残念ながら「メール送信時に画像添付」は対応しません。あしからず……。

2012年5月3日木曜日

死せる生

まさかの3月・4月投稿0でした、けど生きてます。

 2月の記事にも書いた通り、なな字引のSkydrive対応を進めております。現状処理の実装は終わっていて、バグ出しをしている段階です。多分粗方出せたと思うので、今晩にでも更新申請を出す予定です。今回でバージョンが 1.215 ⇒ 1.300 になります。追加機能は、

 ・Skydriveからのインポートに対応
 ・Skydriveへのエクスポートに対応
 ・TSV形式のファイルフォーマットに対応
 ・一部バグフィックス

 となっております。
 TSV形式に対応することにより、顔文字内に「,」を使っているものも正常に取り込めるようになります。

 Skydrive対応には、MSの「LiveSDK」を使用しました。このSDKを使えばSkydriveに限らず、WindowsLiveIDを使ったサービスへのアクセスや情報取得が容易に出来るようになるため、お奨めです。ネット上で調べてもあまりサンプルソースの量は多くありませんが、さほど難しい内容でもないので、ある程度は自力でどうにかなると思います。


 とはいえ、全く詰まらずに作業を進められたわけではありませんでした。
 折角なので、大幅に詰まって悩んでしまった部分について、記事にして残しておこうかと思います。何回かに分けて。何をどこまで書くかは気分次第。




WebBrowserComponent権限に関する注意点
 LiveSDKで個人的にもっとも感動した点が、認証の部分です。
 通常の認証方法の場合、twitterなどのようなOAuth認証方式だったと思うのですが、そこは所詮日曜プログラマーな私、そんな認証なんて一度も扱ったことがないので、なんか苦手意識が強くありました。概略図とか見ると、なんかサーバにリクエスト投げてその結果を受け取ってさらにまた投げて……とか、ややこしそうにしか見えなかったので。
 しかし、LiveSDKを使えばそんな手間はいりません。LiveSDKを参照設定に追加してやって、XAMLに名前空間の定義とボタンを1つ配置して、認証結果をオブジェクトで受け取るだけです。


名前空間の追加例
xmlns:Microsoft_Live_Controls="clr-namespace:Microsoft.Live.Controls;assembly=Microsoft.Live.Controls"

サインイン用のボタンを配置する例(ボタンはLiveSDKに含まれています)
Microsoft_Live_Controls:SignInButton x:Name="btnSignIn" ClientId="**********" Branding="Skydrive" Scopes="wl.skydrive_update" SessionChanged="btnSignIn_SessionChanged"


 ソースコード内では、サインインボタンの「SessionChanged」発生時に、
e.Status == LiveConnectSessionStatus.Connected 
 ってな感じでログイン成功したかどうか判定してやって、成功してたならば e.Session を LiveConnectClient型として受け取ってやるだけです。ね、簡単でしょう?





 この画像にあるボタンオブジェクトが、SignInButtonです。
 SignInButton のプロパティ値「Branding」を"Skydrive"にしておくと、このようにSkydriveへのサインインになります。もちろんWindowsLiveへのログインなど、他のものも設定できます。細かい話については他の人のblogとかを参考にしてね!(逃





 で、そのボタンを押すと、自動的にこんな画面に遷移します。あとはここにLiveIDとパスワードを入力してサインインし、アプリがアクセスすることを許可するためのボタンをポチっと押してやるだけです。ここら辺の処理はすべてLiveSDK内部に組み込まれているため、こちらが何か実装する必要は一切ありません。
 で、許可ボタンを押すとアプリの画面に戻って前述の「SessionChanged」イベントが発生する、という仕組みです。
 サンプルアプリを作ってみて試したところ、実にすんなり実装出来たので、よしではなな字引にも埋め込んでやろう……と思ったのですが、なな字引内ではなぜかSignInButtonを押したところでエラーになりました。(ここからが本題です)





 こんな感じの見慣れぬエラーが。
 「UnauthorizedAccessException」 というエラーメッセージを翻訳機にかけたところ、不正アクセス例外と出ました。どうも、何かへのアクセス権限がなくて怒られているらしいです。
 最初に疑ったのは、SignInButtonプロパティの「Scopes」の設定ミス。ここで、Skydriveへのアップデート権限を定義しているのですが、これのスペルミスとか。しかしどうも違うようで、次に疑ったのが「ClientId」のミス。LiveSDKを使うには、Liveの開発者用ページでアプリを登録しておき、ClientIdを取得しておいて、ボタンのプロパティ値に設定しておく必要があるのです。しかし、これも正しかった。
 では何ぞや……と、新規プロジェクトを作り直したり他のアプリに埋め込んでみたりと色々試行錯誤した結果、どうもなな字引だけがエラーになっているようでした。
 なな字引だけが他のアプリと特別違っているところ……特に心当たりがなかったので、もう手当たり次第に色々試していましたが、エラーは解決せず。そろそろ心が折れそうだと思っていたとき、ふと、気になる設定を思い出しました。

 WPのアプリは、必要とする権限を「WMAppManifest.xml」で定義しています。しかしこれ、実はAppHubへアップロードしたときに自動的に判定されるため、自分でいじる必要はさほどありません。
 しかし何回か前のアップデートのとき、「機械任せにせず、ちゃんと自分で明示的にアクセス権限を定義しておくのが礼儀だよね(キリッ」とか考えながら中身をいじっていたことを思い出しました。

 中身を確認すると…… <Capability Name="ID_CAP_WEBBROWSERCOMPONENT"/> がコメントアウトされていました。

 SignInButtonをクリックした直後の画面を、もう一度見てください。そう、これは内部的にWebBrowserComponentを使用しているのです。それのアクセス権限をはく奪していたからこそのエラーだったわけです。
 コメントアウトを解除したところ、正常にアクセスできるようになりました。こんなことで1日悩んでいた自分が恨めしい……ですが、WMAppManifest.xmlをいじったことを忘れていると、なかなか気付きにくいエラー原因かと思います。
 新規でプロジェクトを作る場合は引っかかりにくいとは思いますが、もし既存アプリへの機能追加を考えている人は、一応この点にも注意してみてください。


2012年2月29日水曜日

鋭い痛み

少し前のことですが、「Windows Phone Arch」主催の勉強会が2/18に名古屋で行われたのはご存じでしょうか?それに私も参加してきました。千葉から出向いて。
 ちなみに私、実は富士山よりも西に行くのは人生初の経験でして、ちょっとはしゃいでしまいました。新幹線内では富士山の写真何枚か撮ったりもしました。えぇ、近くに座ってた出張らしきサラリーマンさんに半笑いで見られてました。

 はしゃいだついでだったので、ライトニングトークにも参加してみました。これも人生初です。
(※ライトニングトークとは……1人5分くらいの持ち時間で、テーマに沿って好き勝手にスピーチするやつです。最近の勉強会では色んなところで当たり前のように行われているっぽいです)

 で、そのときに使ったセッション資料が、以下のURLで公開されているので、もしご興味があれば、どうぞ。(ちょっとレイアウト崩れてたり一部見えなくなってるとこもありますが)
 http://www.wp-ug.net/arch/

 ちなみにLTのテーマは、「痛IS12Tのすすめ」です。
 ↓みたいなのを作ってみました、的な紹介LTです。ツイッターでも呟いたりしたので、画像を見たことある人もいるかもしれませんね。








 初LTがそんなんでいいのかい……と自問しつつのLTでしたが、好評を頂けたようでなによりでした。アンケートのコメントで何名かから「痛い!」という突っ込みを頂きました、お褒めの言葉を頂きありがとうございました。どうせならもっと罵倒してくれてもよかったのに、と思ったとか思わなかったとか。
 これを契機に、別の機会にも何らかのLTやっていければなー、とか思ってますので、もし見かけましたら、よろしくお願いします。




傷口に塩など擦り込まんさ。硫黄でやるんだ。
――溶岩使いマトック

2012年2月15日水曜日

インプの悪戯

かなり久々の投稿になってしまいました。申し訳ないです。


 去年の11月ごろの記事で、週アスPlus様で「支払は任せろ!」を取り上げてもらえたという記事を書きましたが、なんと今度はなな字引も取り上げてもらうことが出来ました!



 なな字引は個人的にも力を入れて開発・更新してるアプリなので、本当にうれしい限りです。こういうメディアに取り上げてもらえるということはほとんど経験ない……というかWP7でアプリ開発するまで無かったことなので、興奮してしまいます。そろそろ取材とか来るのかなワクワク!

 メディアに限らず、評価や口コミでもうれしい意見を聞かせていただいており、励みになります。


 そのなな字引ですが、現在とある不具合の修正バージョンをAppHubに申請中です。
 今後は以下のような機能を追加出来たらいいなぁと考えております。
 ・Skydriveへのエクスポート機能、及びインポート機能
 ・CSV以外の形式の取り込み(TSV…タブ区切りを予定中)
 ・多言語対応(とりあえず英語だけ)

 以下のような機能が追加出来るほどの腕があるか謎だけど妄想中です。
 ・Twitter連携(TL表示、RT、リプライ、ダイレクトメッセージ等の機能。ただしツイッタークライアントではないので検索等には未対応の予定)
 ツイッタークライアントなんて作ったことないので、これはほんと、チャレンジ項目レベルです。


 いつか公式で辞書登録が出来るようになったらいらない子になってしまうアプリですが、その時までなるべく皆さんに便利に使っていただけるように、頑張っていこうかなと思ってます。今後ともよろしくです!

(余談:タイトルに使ってるMTGのカード名は、内容にリンクしているときもあれば全く関係なく気分で選んでる時もあります)



罪なき者は罪ある者の犯罪の報いを受けるのか? もちろんその通り。それこそが弱者の運命と言うものだ。
――ニコル・ボーラス

2011年12月14日水曜日

変身

ななふぉさんのところで、何やら面白いことが出来るようになったという記事が挙がっていたので、さっそく試してみました。
 以下、MTG成分濃厚な画面キャプチャです。






欲深きドラゴン
(ウルザズ・サーガ)





パッケージイラスト
(エルドラージ覚醒より、真実の解体者コジレック)





解放されしもの、カーン
(新たなるファイレクシア)





パッケージイラスト
(新たなるファイレクシアより、核の占い師ジン=ギタクシアス)





大修道士、エリシュ・ノーン
(新たなるファイレクシア)







ファイレクシアの非生
(新たなるファイレクシア)



 いいですねーこういうの。
 WP7ではタイル画面のカスタマイズはあまり望んでいませんでしたが、やはりこういうことが出来るとちょっと楽しいですね。もっとセンスある人ならいいのを作ってくれるんでしょうけど。(私なんかは画像はりつけただけですんで、ほんと)
 普段のメトロなタイルに飽きてきたときなどに、ちょっとした気分転換としては十分楽しめそうです。

 ただまぁこれがメトロかと言われたら……まぁ、お遊び要素ですし。



 あと、濃厚なMTG成分だけではアレなんで、女の子の画像も貼り付けておきましょうか。



  

 可愛い女の子かと思った? 残念!さやかちゃん(オクタヴィアセット)でしたー!






アーッ!指が変に!

2011年12月11日日曜日

小悪疫

Windows Phone Advent Calendarの記事で書いた、本来投稿するはずだったWP7ミニTipsを、折角なのでここで放出しておきます。



証明書をWebブラウザからインストールする方法

 最近、社内でのスマフォ使用に関してセキュリティ絡みの調査や提案書の資料作りなどをしていたのですが、そのときに私の個人的な願望で無理やりWP7も検討対象としていたときに気付いた話。
 企業のLANにアクセスするときに独自の証明書などをPCにインストールして接続させる、という運用をしている会社はそれなりに多いと思います。うちの会社もそのタイプです。なので、スマフォで社内LANにアクセスする場合にも証明書が必要になります。
 PCならばブラウザ経由で証明書ファイルにアクセスすれば、そのままインポート画面が出てきて、入れるだけです。
 WP7も標準的な証明書ファイル(cerとか)には対応しているので、同様の手段でブラウザでアクセスすると……。


 (画像はぼかしてます)
 こんな風に、何故か文字列として認識されてしまい、うまくインストールできません。バグ?
 どうやらこれは、cer形式ファイルのときだけ発生するようです。詳しくはMS安納さんのこの記事を参照。
 というわけで、WP7に証明書を配布するときは電子メールを使いましょう。



 面倒ですね。
 なので解決策です。

 簡単です、Zip形式に圧縮して置いておけばいいのです。
 ブラウザ経由でZipファイルにアクセスすると、それがパスワードなどかかっていなければ解凍して中身を見ることが出来ます。この方法でCERファイルにアクセスすると、通常通りに証明書のインポート画面が出てきます。この方法ならばブラウザ経由でインポートすることが可能です。

 多分これは安納さんも知らない方法じゃないかしら?先日お話したときには、電子メール経由で送ればCERファイルでもインストール出来るというのも気付いていなかったようなので。


 というわけで、こんな簡単なミニTipsで終わらせる予定でした。
 が、皆さん気合入りまくってたようで、記事のレベルが高かったので、これだけで終わらせるとやばいなと思って、あんな記事になりました。直前までネタの用意が出来てなかったので、大慌てでした……。
 でもこういうイベントがあるのは楽しいですね、またこういうのがあれば参加してみたいものです。




大きな損失は、えてして衝撃を麻痺させるものだ。犠牲者を真の苦痛へと追い詰めるのであれば、細かな苦痛を大量に浴びせなければならぬ。
――アーボーグのラタドラビック

頭の混乱 (PanoramaやPivotのヘッダ文字サイズを変更する)

日替わりでWP7に関することでBlog記事を書くというイベント、Windows Phone Advent Calendarに参加してみました。私の担当は11日目で、この記事がそうです。

 最初は本当に簡単な、「1へぇ」がもらえるかどうかレベルのこと書いて終わりにするつもりだったのですが、他の参加者の方々の記事が思いのほかレベルが高く、慌てて技術系の記事を用意した次第です。


 では本題。
 WP7アプリを作ったり使ったりしてて、たまに、Pivotヘッダーのタイトル部分が大きすぎるなぁと思うことがあります。下の画像で言うところの、「最初」「2番目」に該当する部分です。


 デザインだと言われればそれまでなんですが、アプリによっては情報表示量が減ってしまってあまり嬉しくないこともあります。例えば私の「なな字引」なんかも最近、ちょっとヘッダのでかさが邪魔になってきました。
 同様の問題が、Panoramaアプリでもいえます。

 Panoramaなんかだと、タイトル自体(画像では マイ ...となって見切れてるやつ)もでかいですし、その下の各ページにあるリストのタイトル(最初の項目となってるやつ)も中々の大きさです。
 しかしPanoramaの場合は、これらを簡単に修正してやることが出来ます。
ExpressionBlendなどでソリューションを開き、カスタムテンプレートとしてサイズをいじってやるだけなのです。例えばタイトルの文字の大きさは、Panoramaコントロール自体を右クリックし、[テンプレートの編集] ⇒ [コピーして編集] と選択します。





 その後、TitleLayerを選択した後に、プロパティウィンドウからテキストの項目にある、フォントサイズを好きな値に変更してやるだけです。ついでに位置の調整も行えば、ほらこの通り。




 リストのタイトルについてもほぼ同様。
 PranoramaItemを選択して右クリックし、[テンプレートの編集] ⇒ [コピーして編集] と選択します。今度は header オブジェクトを選択し、またフォントサイズを変えてやるだけです。ね、簡単でしょう?
 



 では、Pivotのヘッダーも同じようにササッと直しちゃいましょう。
 やはりExpressionBlendでソリューションを開き、Pivotオブジェクトを選択して右クリック、、[テンプレートの編集] ⇒ [コピーして編集] と選択します。
 オブジェクトを見ると……ふむ、この HeadersListElement というのが名前的にそれっぽいですね。こいつのフォントサイズを弄ってしまいましょう。




 ところが、あれ、なんか変わってない……?



 ならばPivotItemのほうだ、と思ってやってみても、そちらにも該当しそうな項目は見当たりません。ある程度調べてみましたが、どうやらPivotのヘッダ文字の大きさをExpressionBlendで簡単に変えることは出来ないようです。
 また、公式のPDFファイル(PDFが開きます)によれば、Pivotのヘッダ高さは固定されており、変更できないとしっかり定義されておりました。

 しかし現実には、Twitterアプリの「Amelloides」や「moTweet」のように、Pivotヘッダの文字サイズを変更しているものがあります。どうやっているのでしょう?

 実際にこれらアプリがどうやっているのかは作者しか知りませんが、実は以下のような方法で変更する方法は存在します。XAMLファイルを自分自身で書いてやればいいのです。この方法はある程度XAMLについての知識がある人でないと厳しい方法です。

 まず、以下にPivotの中に2つのPivotItemを持つ、標準的なソースを示します。

--------------------------------------------------------

<!--ピボット コントロール-->
<controls:Pivot Title="マイ アプリケーション">
    <!--ピボット アイテム 1-->
    <controls:PivotItem Header="最初">
 <!--テキストの折り返しを行う 2 行リスト-->
 <ListBox x:Name="FirstListBox" Margin="0,0,-12,0" ItemsSource="{Binding Items}">
     <ListBox.ItemTemplate>
  <DataTemplate>
    <StackPanel Margin="0,0,0,17" Width="432" Height="78">
        <TextBlock Text="{Binding LineOne}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
        <TextBlock Text="{Binding LineTwo}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
    </StackPanel>
  </DataTemplate>
     </ListBox.ItemTemplate>
 </ListBox>
    </controls:PivotItem>
 
    <!--ピボット アイテム 2-->
    <controls:PivotItem Header="2 番目"> 
 <!--テキストの折り返しを行わない 3 行リスト-->
     <ListBox x:Name="SecondListBox" Margin="0,0,-12,0" ItemsSource="{Binding Items}">
  <ListBox.ItemTemplate>
      <DataTemplate>
   <StackPanel Margin="0,0,0,17">
       <TextBlock Text="{Binding LineOne}" TextWrapping="NoWrap" Margin="12,0,0,0" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
       <TextBlock Text="{Binding LineThree}" TextWrapping="NoWrap" Margin="12,-6,0,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
   </StackPanel>
      </DataTemplate>
  </ListBox.ItemTemplate>
     </ListBox>
    </controls:PivotItem>
</controls:Pivot>

--------------------------------------------------------

 うん、超絶見難いですね。
 重要な場所だけ抜き取ります。それが以下です。

--------------------------------------------------------

<!--ピボット アイテム 1-->
<controls:PivotItem Header="最初">
  <!--テキストの折り返しを行う 2 行リスト-->
  <ListBox ...省略>
  </ListBox>
</controls:PivotItem>
 
<!--ピボット アイテム 2-->
<controls:PivotItem Header="2番目"> 
  <!--テキストの折り返しを行わない 3 行リスト-->
  <ListBox ...省略>
  </ListBox>
</controls:PivotItem>

--------------------------------------------------------


 なんかここにFontSize属性とか追加してやればいけそうな気もするんですが、やっぱダメです。
 この部分を思い切って、以下のように書き換えちゃってください。


--------------------------------------------------------

<!--ピボット アイテム 1-->
<controls:PivotItem>
  <controls:PivotItem.Header>
    <ContentControl>
      <TextBlock Text="最初" FontSize="36" />
    </ContentControl>
  </controls:PivotItem.Header>
  <!--テキストの折り返しを行う 2 行リスト-->
  <ListBox ...省略>
  </ListBox>
</controls:PivotItem>
 
<!--ピボット アイテム 2-->
<controls:PivotItem>
  <controls:PivotItem.Header>
    <ContentControl>
      <TextBlock Text="2 番目" FontSize="36" />
    </ContentControl>
  </controls:PivotItem.Header>
  <!--テキストの折り返しを行わない 3 行リスト-->
  <ListBox ...省略>
  </ListBox>
</controls:PivotItem>

--------------------------------------------------------

 多分エラー扱いされると思いますが、問答無用でリビルドしてみましょう。エラーは消えたと思います。
 こうすることでヘッダー部分をTextBlockに変えることが出来ます。
 あとはこのTextBlockのフォントサイズを弄ってやると……。



  


 こんな具合に文字サイズを小さくすることが出来ました。また、それぞれのヘッダのサイズを別々にすることも可能です。
 あとは位置とかを適切に調整してやれば、OKです。



 以下に、またえらく見難いですけど全体ソースを貼っておきます。


--------------------------------------------------------

<!--ピボット コントロール-->
<controls:Pivot Title="マイ アプリケーション">
    <!--ピボット アイテム 1-->
    <controls:PivotItem>
        <controls:PivotItem.Header>
            <ContentControl>
                <TextBlock Text="最初" FontSize="36" />
            </ContentControl>
        </controls:PivotItem.Header>
        <ListBox x:Name="FirstListBox" Margin="0,0,-12,0" ItemsSource="{Binding Items}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Margin="0,0,0,17" Width="432" Height="78">
                        <TextBlock Text="{Binding LineOne}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                        <TextBlock Text="{Binding LineTwo}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </controls:PivotItem>

    <controls:PivotItem>
        <controls:PivotItem.Header>
            <ContentControl>
                <TextBlock Text="2 番目" FontSize="36" />
            </ContentControl>
        </controls:PivotItem.Header>

        <ListBox x:Name="SecondListBox" Margin="0,0,-12,0" ItemsSource="{Binding Items}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Margin="0,0,0,17">
                        <TextBlock Text="{Binding LineOne}" TextWrapping="NoWrap" Margin="12,0,0,0" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                        <TextBlock Text="{Binding LineThree}" TextWrapping="NoWrap" Margin="12,-6,0,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </controls:PivotItem>

</controls:Pivot>


--------------------------------------------------------


 以上です、如何でしたでしょうか?
 私自身もXAMLとかはまだ勉強不足で、解説できるほどの腕前は持っていないですが、少しでも皆さんに知識を共有していただければと思って書いてみました。
 それと最後に、重要なことですが、この記事は 「名前はまだない」様のメモのコンテンツを参考にして(というかパクって)書かせていただきました。なので、知ってる人は既に知ってる内容だったかもしれません。



あんたのそのちっぽけな魂をぎゅっと絞ってやる。スポンジみたいにさ。
――アーボーグの妖術使い