In-App Updates API導入に失敗した
In-App Updatesの特徴
- ユーザーにアップデート通知を能動的に行える
- 公式UIなので、Androidを使用しているユーザーだったり、文字を呼んでくれるユーザーであればアップデートを促せる
なぜ失敗したか
- Closed Channelでは機能しない
- 特殊用途のアプリでは使えない
- 残念
CircleCIのsave_cacheステップで `x509` エラーが出る
正常にSaving Cacheが行えない
- こんなエラーが出て、Saving Cacheに失敗する場合がある
Skipping cache - error checking storage: error fetching info: RequestError: send request failed caused by: Head https://circle-production-customer-artifacts.s3.amazonaws.com/picard/hogefuga.tar.gz: x509: certificate signed by unknown authority
原因
- Plainなイメージ(
ubuntu:18.04
とか)の場合、サーバーの証明書もインストールされていない - なので、Dockerイメージ内からアップロードしようとして失敗する
対策
- 証明書をインストールすればいい
- こんなstepを入れる
- run: name: install tools command: | apt update apt install -y ca-certificates update-ca-certificates
Ubuntu 19.04をインストールした環境でAndroid Emulatorが激重になる問題の対処
状況
- Thinkpad X1 Carbonを購入したので、Ubuntu 19.04をクリーンインストールしてセットアップした
- Android Emulatorを起動したが、動作が異様に遅い
- 1〜2fps程度しか動作しない
問題の観察
さらなる観察
自分の行動を観察
なぜ移動させると遅いのか?
- Ubuntu 19.04から、ディスプレイ拡大率を100%, 200%以外に設定できる
- その時は125%に設定していた
- ちょっと解像度のいいThinkpadを買ってた
- 画面横幅を125とした時、100よりも右側に寄せるとレンダリングが遅くなる事象を発見する
- エウレカだ!
解決策を探す
さらなる観察をする
- GPUの問題であれば、OS全体に影響があるはずである
- ウィンドウをマウスでグリグリ移動させる
- 125%のときにチラツキが発生する
- 100%のときとは明らかに異なるチラツキ
- ディスプレイ品質ではなく、グラフィクスエンジンの問題に見える
- シングルバッファレンダリングのような挙動だ
- 100%に解像度を戻し、WebGLのベンチマークを回す
改善への道
- チラツキの改善に関する記事を探す
- Qiitaに行き着く
- qiita.com
- 設定する
- 再起動する
- 100%の拡大率で、無事にWebGLのベンチマークで60fps動作!
- 125%の拡大率にする
- その状態でAndroid Emulatorを起動
- ほぼ正常と思える速度でAndroid Emulatorが動作
- 右端に寄せても問題ない
ペンギンハイウェイは面白い
- BDを購入してから、息子も娘も毎日のようにペンギンハイウェイを観てる
- ペンギンかわいい
- エウレカだ!
Thinkpad X1 Carbon 2018を購入~OSセットアップまで
セットアップ
Ubuntuを基本にしつつ、Windows 10 Proを併用するつもりだったので、購入してすぐにいろいろ弄り倒す。
失敗1 初期セットアップ時にMicrosoftログインをしてしまった
- Users/<メアド>/Home ディレクトリになってしまう
- 任意のディレクトリ名にするためには、初期セットアップ時にMicrosoftアカウントを使わずにオフラインアカウントを作る必要がある
- 再セットアップ
失敗2 Ubuntuインストールに失敗
Biosセットアップ
- Fn <--> Ctrlスワップ
- Secure Boot [Disable]
- UEFI / Legacy Mode [Legacy Only]
- コレは設定しなくてもThinkpadの場合は問題ないようなので元に戻した
- Boot Mode [Diagnostics]
- コレは設定しなくてもThinkpadの場合は問題ないようなので元に戻した
失敗3 Windows10だけ再インストールしようとしたらパーティションが飛んだ
OS再インストール
長かった
ライブラリプロジェクトでFirebase SDKを使ったUnitTestを動作させる
なぜコレが必要か?
- Firebase SDKを組み込んだ処理は、通常
Google Services Plugin
とgoogle-services.json
をアプリに組み込むことで動作する - このPluginはApplicationビルド用のプロジェクトでしか動作しない
- ライブラリプロジェクトにFirebase SDKを組み込んだ場合、上記の前提だとUnitTestをするためのApplicationプロジェクトが必要になってしまう
- 明示的な初期化を行うことで、ライブラリプロジェクトだけでUnitTestが行える
方法
@RunWith(AndroidJUnit4::class) class HogeTest { @Before fun before() { FirebaseApp.initializeApp(context, FirebaseOptions.Builder().also { it.setApiKey("hoge-fuga") it.setGcmSenderId("hoge-fuga") it.setStorageBucket("your-project.appspot.com") it.setProjectId("your-project") it.setApplicationId("hoge-fuga") it.setDatabaseUrl("https://your-project.firebaseio.com") }.build()) } }
通常自動的に行われる初期化を、手動でやることでUnitTestで動作するようになる。 ただし、InstrumentationTestでしか動かない(Firebaseの動作にGooglePlayServiceが必要)。
方法をスマートに
google-services.json
を androidTest/assets
に配置してロードすることで、ある程度勝手に初期化できるようになる。
val json = ... // assetsからgoogle-services.jsonを読む FirebaseApp.initializeApp(context, FirebaseOptions.Builder().also { builder -> val root = JSONObject(json) root.getJSONObject("project_info").also { values -> builder.setDatabaseUrl(values["firebase_url"].toString()) builder.setGcmSenderId(values["project_number"].toString()) builder.setProjectId(values["project_id"].toString()) builder.setStorageBucket(values["storage_bucket"].toString()) } root.getJSONArray("client").getJSONObject(0).also { client -> client.getJSONObject("client_info").also { values -> builder.setApplicationId(values["mobilesdk_app_id"].toString()) } client.getJSONArray("api_key").getJSONObject(0).also { apiKey -> builder.setApiKey(apiKey["current_key"].toString()) } } }.build())
30代がエンジニアを続けるための第一歩
なにがあったのか
- 仕事や確定申告やアレやコレで寝不足だった
- それでも子どもは元気だった
- 子どもが保育園から病気もらってきてしばらく登園禁止になった
- それでも子どもは元気だった
- 確定申告も待ってくれなかった
なにがおきたか
- 3週間ちかく風邪の症状に悩まされた
- せき、鼻水、頭痛
- それでも仕事はやらなきゃいかんし、子どもは元気に遊んでくれと言う
何を改善すべきか
- 風邪をナメて考えず、早めに医者に行く
- 早く寝る。日付変更前に寝る
- 睡眠時間を増やしたらかなり健康状態がかなり改善された
- うがい手洗い大事
- そして寝る。早く寝る
第一歩とは
- おまえは若くない
- 無理をできるほど若くない
- 健康一番
- 納期は二番
- それでも確定申告はやってくる
- 早めにやろう、確定申告
2020年4月追記
- 今年も風邪をひきました