ぴーさんログ

だいたいXamarin.Formsのブログ

デスクトップPC更新

自宅のデスクトップPCを更新しました。

いつも構成を忘れるので備忘録としてここに残します。

買ったもの

旧PCはCore i7 3770K(2012年発売)だったので6年ぶりの更新。ストレージとグラボは旧PCから移植。

写真

f:id:ticktack623:20181208142141j:plain

f:id:ticktack623:20181208142011j:plain 作業開始。


f:id:ticktack623:20181208164413j:plain クソデカCPUクーラー君。


f:id:ticktack623:20181209134422j:plain 組み立て完了、マザーボード側。


f:id:ticktack623:20181209134259j:plain 組み立て完了、裏配線。

艦これ二期のスクリーンショットを撮るChrome拡張(ver.1.4)

chrome.google.com

前回の問題点を改善して、高DPIの環境だったり、スクロールやズームをしていても原寸大のスクリーンショットが撮れるようになりました。

ついでにオプションで保存形式を選択できるようにして

申し訳程度のアイコンを設定しました。

f:id:ticktack623:20180824202442j:plain

艦これ第二期がスタートしたのでスクリーンショットを撮るChrome拡張を作った

8月17日(金)に艦これ第二期がスタートして、FlashからHTML5に移行しました。リニューアルオープンです。

ゲーム画面が 800x480 から 1200x720 になりました。大きい!

それに合わせて艦娘の立ち絵などの画像素材も高解像度化されました。う、美しすぎる!

綺麗になったら艦娘たちのスクリーンショットたくさん撮りたいですね。

という訳で艦これ二期のスクリーンショットを撮るChrome拡張を作ってみました。ボタンひと押しでスクショが撮れます。 (初Chrome拡張たのしかったです)

せっかく作ったので公開します。

chrome.google.com

ソースコード

制限事項

スクロールしたりウィンドウを縮小していると正しく取れない

Chrome APIでタブの見えている範囲をキャプチャしてゲーム画面部分を切り抜いています。 なのでスクロールするとずれちゃいます。(スクロール量を取得すれば対応可能?)

高DPI環境で使うと正しく撮れない

例えばMacBook Proのような高DPIで画面が拡大表示されている環境。

切り抜く範囲をDPIに応じて調整すれば対応できるけど、拡大された画像を縮小し直すことになるので画質劣化しそう。

スクショを撮るたびにいちいち保存場所を選ばされる

作り始める前はFileSystem APIでローカルに保存できると思っていたのですがChrome拡張からは使えないようなので、諦めてファイルとしてダウンロード形に落ち着きました。

保存場所を選ぶダイアログが出ている間も次のスクショが撮れるので連写は可能。

アイコンが無い

せっかく公開したので何か作ります。

試したけどダメだったアプローチ

ゲーム画面を描画しているcanvas要素から直接描画内容を画像化

canvas.toDataURL()しても真っ黒な画像しか取得できませんでした。

ゲーム側で使ってるPixiJS(?)の設定でレンダラーのバッファを保持するように使っていないと取得できない模様。

Xamarin.Formsのトロフィーをもらいました

Xamarin.FormsチームがGitHubリポジトリのコントリビューター宛にトロフィーを贈ってくれました。やったぜ。

(P3PPPは私のGitHubアカウント名)

(ちなみにトロフィーの形はXamarin Universityの認定トロフィーと同じだったりする)

届くまでの紆余曲折

2018年 5月下旬

David(※)「Xamarin.Formsリポジトリにコントリビュートありがとう!贈り物をしたいのでmailing address(住所)を教えてもらえますか?」
ワイ「(細かいやり取りをするための連絡先をGitHub経由で聞いてるのかな?)、これです(e-mailアドレス)」
David「physical mailing addressを教えて?」
ワイ「アッハイ、ここ宛てでお願いします。」

※Xamarin.Formsのプログラムマネージャー

2018年 7月頭

David「アメリカ国外に発送するには荷受人の電話番号が必要みたい、教えてください。こういうことをするのは初めてで、学びがあります。」
ワイ「この番号でー。」

2018年 7月中旬

UPS(配送業者)「アメリカからの荷物が来てるんですが心当たりあります?住所が市区町村までしか入ってなくてどこに送れば?宛先がMicrosoftアワードセンター(?)になってますが会社受取にします?」
ワイ「その宛先は発送作業した部署か何かですかねぇ、普通に個人宅宛でお願いしますー。」
UPS「あー、Microsoftの従業員ではないんですね、承りましたー。」

数日後着弾

こうして見ると、ほぼ電話番号だけで届いてますね。無事に届いて本当に良かった。

Xamarin.Macのコントリビュータになりました

Xamarin.Macなアプリは作ってないんですけどね。

この時のPRが修正を受けつつマージされました。

同様に戻り値がNSObjectになってしまっているAPI1がたまにあるらしいので、見つけた人はxamarin-maciosのリポジトリにissue登録してあげてください。NSObjectになっている箇所と、正しい型が載っているAppleのドキュメントのリンクを載せてissue登録すれば、バージョンアップのタイミングで対応してくれると思います。

なんだったらTwitterで@ticktackmobileに教えてくれるのでも良いです。

参考までにPRコメントのやりとり(超意訳)

ワイ「NSObjectから正しい型に変更するPR作ったやで」
中の人A「これじゃあ破壊的変更になるから取り込めないやで」
中の人B「API互換性を維持するために#if XAMCORE_4_0みたいなバージョン分岐作るとええで」
中の人C「ブランチ修正しといたで、これでいこか」
中の人D「ちょっとまって、古いバージョンでも正しい型で受け取れるメソッド追加するのはどうやろ」
中の人C「悪くないやん、ええんちゃう」
GitHub「マージしたやで」
ワイ「やったぜ」

#if XAMCORE_4_0の部分は次のバージョン番号によって変わると思うので、新しめのコミットから探して真似すればPRもすんなり通るんじゃないかな。


  1. たぶんヘッダーファイルではid型で定義されているのだと思う。

ASUS ZenFone 4s MAXでXamarin.Androidの実機デバッグができない場合のトラブルシューティング

ASUS ZenFoneでXamarin.Androidアプリの実機デバッグをする際、「Mono Shared Runtimeのインストールがブロックされて失敗する」というのは既知の問題があります。

Can't deploy on device (Android MarshMallow) — Xamarin Forums

ZenFone 2や3では「Auto-start Manager」アプリのブロッキングを無効化すれば良いらしいです。

ZenFone 4sでも同様の問題が発生しますが、「Auto-start Manager」アプリが無くなっているので解決手順が異なります。

  1. 「モバイルマネージャー」アプリを開く。
  2. 「PowerMaster」を開く。
  3. 「節電オプション」を開く。
  4. 「自動軌道によりアプリを自動拒否する」をオフにする。

これで OK!

Visual Studio 2017で作成したXamarin.FormsプロジェクトをVisual Studio 2015でビルドする

さて、現時点のVisual Studio 2017(ver. 15.6.5)でXamarin.Formsプロジェクトを新規作成すると結構新しくてイケイケなプロジェクトをはいてくれます。

  • packages.configファイルが無い
  • 共通コードが.NET Standard 2.0(またはShared project)

これをVisual Studio 2015で開くと...

f:id:ticktack623:20180409235548j:plain

プロジェクトファイルが読み込めず、ビルドできません。

理由は...

  • .NET Standard、ましてや2.0なんて対応してない。
  • packages.configに代わり、PackageReferenceというフォーマットが使われている。VS 2015(というかMSBuild 14では読めない)

逆マイグレーション

VS 2015でビルドできるようにするために

  • .NET StandardプロジェクトをPCLプロジェクトで作りなおす。
  • iOSやAndroidのcsprojファイルからPackageReference要素を削る。(参照していたパッケージをメモしておく)
  • packagesフォルダの中身を削除する(だいたいslnファイルと同じ階層にあるやつ)
  • 空のpackages.configファイルを追加する(必要ないかも)
  • PackageReferenceで参照していたパッケージをNuGetパッケージマネージャで追加しなおす。
  • アセンブリの参照方法が変わって通らなくなったコードが出た場合は修正する。

まとめ

特別な理由がない限りVS 2015を投げ捨てましょう。そろそろ限界です。