デスクトップPC更新
自宅のデスクトップPCを更新しました。
いつも構成を忘れるので備忘録としてここに残します。
買ったもの
- CPU: Intel Core i7 9700K
- メモリ:SanMax SMD4-U32G48M-26V-D (DDR4-2666 16GB2枚組)
- マザーボード:ASRock Z390 Phantom Gaming 6
- 電源:Seasonic Prime 850 Titanium
- ケース:Fractal Design Define R6
- CPUクーラー:Noctua NH D15
旧PCはCore i7 3770K(2012年発売)だったので6年ぶりの更新。ストレージとグラボは旧PCから移植。
写真
作業開始。
クソデカCPUクーラー君。
組み立て完了、マザーボード側。
組み立て完了、裏配線。
艦これ二期のスクリーンショットを撮るChrome拡張(ver.1.4)
前回の問題点を改善して、高DPIの環境だったり、スクロールやズームをしていても原寸大のスクリーンショットが撮れるようになりました。
スクロールしてようが高DPIだろうがちゃんとスクショ撮れるようになったぞい。https://t.co/7cuYUcrJ0G pic.twitter.com/DZ8IZSSNMj
— ざまりん.ふぉーむずのコントリビューター🚲 (@ticktackmobile) 2018年8月21日
ついでにオプションで保存形式を選択できるようにして
Storage APIを使って保存形式を選べるようにしてみた。 pic.twitter.com/0ex4uzNkVX
— ざまりん.ふぉーむずのコントリビューター🚲 (@ticktackmobile) 2018年8月21日
申し訳程度のアイコンを設定しました。
艦これ第二期がスタートしたのでスクリーンショットを撮るChrome拡張を作った
8月17日(金)に艦これ第二期がスタートして、FlashからHTML5に移行しました。リニューアルオープンです。
ゲーム画面が 800x480 から 1200x720 になりました。大きい!
それに合わせて艦娘の立ち絵などの画像素材も高解像度化されました。う、美しすぎる!
綺麗になったら艦娘たちのスクリーンショットたくさん撮りたいですね。
という訳で艦これ二期のスクリーンショットを撮るChrome拡張を作ってみました。ボタンひと押しでスクショが撮れます。 (初Chrome拡張たのしかったです)
ぴったりに切り抜けるようになった pic.twitter.com/OP1FYUSsFF
— ざまりん.ふぉーむずのコントリビューター🚲 (@ticktackmobile) August 18, 2018
せっかく作ったので公開します。
制限事項
スクロールしたりウィンドウを縮小していると正しく取れない
Chrome APIでタブの見えている範囲をキャプチャしてゲーム画面部分を切り抜いています。 なのでスクロールするとずれちゃいます。(スクロール量を取得すれば対応可能?)
高DPI環境で使うと正しく撮れない
例えばMacBook Proのような高DPIで画面が拡大表示されている環境。
High DPI環境で悲しいことになった pic.twitter.com/cK3NxCeoKk
— ざまりん.ふぉーむずのコントリビューター🚲 (@ticktackmobile) August 19, 2018
切り抜く範囲をDPIに応じて調整すれば対応できるけど、拡大された画像を縮小し直すことになるので画質劣化しそう。
スクショを撮るたびにいちいち保存場所を選ばされる
作り始める前はFileSystem APIでローカルに保存できると思っていたのですがChrome拡張からは使えないようなので、諦めてファイルとしてダウンロード形に落ち着きました。
保存場所を選ぶダイアログが出ている間も次のスクショが撮れるので連写は可能。
アイコンが無い
せっかく公開したので何か作ります。
試したけどダメだったアプローチ
ゲーム画面を描画しているcanvas要素から直接描画内容を画像化
canvas.toDataURL()
しても真っ黒な画像しか取得できませんでした。
ゲーム側で使ってるPixiJS(?)の設定でレンダラーのバッファを保持するように使っていないと取得できない模様。
Xamarin.Formsのトロフィーをもらいました
Xamarin.FormsチームがGitHubリポジトリのコントリビューター宛にトロフィーを贈ってくれました。やったぜ。
I just received the trophy of my contributions, thank you #Xamarin Forms team! pic.twitter.com/vxVVZazJgv
— ざまりん.ふぉーむずのソースコード読むマン🚲 (@ticktackmobile) July 21, 2018
(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なアプリは作ってないんですけどね。
何故かNSDistributedNotificationCenter.DefaultCenterの型がNSObjectになってるというツイートを見かけたのでPRにしてみたけど通るかな?https://t.co/T2aOtmWp7B
— ざまりん.ふぉーむずのソースコード読むマン🚲 (@ticktackmobile) 2018年6月12日
この時の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もすんなり通るんじゃないかな。
-
たぶんヘッダーファイルでは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」アプリが無くなっているので解決手順が異なります。
- 「モバイルマネージャー」アプリを開く。
- 「PowerMaster」を開く。
- 「節電オプション」を開く。
- 「自動軌道によりアプリを自動拒否する」をオフにする。
これで 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で開くと...
プロジェクトファイルが読み込めず、ビルドできません。
理由は...
- .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を投げ捨てましょう。そろそろ限界です。