eaglesakuraの技術ブログ

技術的な話題とか、メモとか。

APIサーバーの実行環境の所感 2020

Google App Engine 言語/ランタイムバージョンが限定される 複数バージョンをデプロイして、複数の指定バージョンを簡単に試せる staticファイルの配信が簡単 Go1.9時代(第1世代GAE)はいつも使っていた 今はstaticファイルの配信に使う Firebaseホスティング…

Windows環境のRobolectricでUri.toFile() KTXが正常に動作しない

問題点 Windowsファイルシステムはドライブレター(C:とか)やパスセパレータ(¥)がLinux/Macと異なる Uri.fromFile()を実行したとき、ドライブレターやバッククォート(日本語だと円マーク)を含んだ文字列がURLエンコードされる KTXのUri.toFile()を行う…

WindowsのNTFSはtree()が遅い

起きた事象 Windows版Android StudioのGradle Sync(像のアイコン押すと走るやつ)が異様に遅い 普通に gradlew 実行だけでも遅い MacやUbuntuだと早い 具体的にはこのくらい Windows: gradlew 40秒, WSL2も同じくらい NVMe PCIe 4.0接続しているので、スト…

Protocol BuffersのAndroid向け実装としてSquare Wireを採用した所感

Wire square.github.io Protocol Buffersを採用した理由 大量のデータを扱う処理で、画面外の情報を一時的にファイルやDBに退避したい ついでにIntentで渡したりするのも簡単にやりたい モデルの定義を簡素化したい POJO定義してJSONエンコードも(Intentにp…

AndroidアプリプロジェクトのJDK11対応

AndroidのJDK Android Studioに付属しているJDKはJava8相当 なので、公式にはJava8でビルドするのが良いと思われる なぜJava11対応が必要になったのか CircleCIが用意しているAndroidビルド用Docker Imageが突然Java11になった ああもうしゃーないなぁとか思…

メイン開発PCのパーツ交換をした

メイン開発マシンのスペックアップのため、一部のパーツを入れ替えたので今後のためにメモ。 メイン開発マシンのスペック(2017~) 基本スペック Ryzen 1950X メモリ 2400MHz / 8GB×8 GeForce GTX 1060 NVMe SSD 512GB×2 表OS / Windows 10 / ストレー…

Mac版IntellijでGradle Syncが出来なくなった場合の対処

発生した問題 最近購入したMac Book Pro 13inch / 2020 / RAM32GBでIntellijをインストール gradle syncが行えない 必ず失敗し、ログも表示されない IntelliJ自体のログを見ると、 Java home is different と言われてDaemon接続に失敗しているらしい 解決 An…

Intellij Idea 日本語EAP版が配信されているので試した結果、アンインストールした

日本語化の利点 日本語話者なので、自然に使えるでしょう 初学者に勧めやすい これは重要。超重要 日本語Visual Studioから、英語Eclipseに移った当時(10年以上前)、必死に日本語パックの初期設定とか探した EAP版の問題点 フィードバック済み Run... とか…

ChildFragmentのViewが一部条件で表示されない場合のワークアラウンド

問題点 MotionLayoutの中にChildFragmentでConstraintLayoutの中にFragmentの中にカメラプレビューを置いた ユーザーの操作にあわせてアニメーションしたり、Viewを入替えたりする サムスン、Huaweiの端末(もしくはAndroid 8以上?)でChildFragment.replac…

仕事用モバイルノートの要件 2020

新型PCが発売される季節なので、選定の際の要件を定義しておく。 状況を整理するのは良いことだ。 利用シーン 会社が運営している施設で作業するのに使う 往復で徒歩40〜50分くらいになる 基本的に自宅作業なので、気分転換にカフェとかで仕事する 平時であ…

Android定型コードをスッキリさせるための Wofkflow Dispatcher ライブラリ 1.0.0を公開

Wofkflow Dispatcherとは GitHub - eaglesakura/workflow-dispatcher Androidアプリ開発でよくある 画面やActivityやプロセスを跨ぐ可能性のある非同期処理 をなるべく簡単に扱うためのライブラリ Annotation Processorを使って、定形処理を出力する startAc…

秘伝のタレを受け取ったときにまずやること

秘伝のタレとは 年単位で職人によって継ぎ足され、熟成されたソースである 衛生環境が良い秘伝のタレは素晴らしい味だが、常に良い衛生環境の中で育つわけではない 深呼吸する 何事も、一歩ずつ解決しなければならない コードフォーマッタを適用する 最初に…

Android Studio 3.6.1で稀にReleaseビルドが失敗するのを回避する

失敗時のログ Execution failed for task ':app:minifyReleaseWithR8'. > Multiple entries with same key: Method $$ServiceLoaderMethods.$load0 Proto L java.util.Iterator =Encoded method Method $$ServiceLoaderMethods.$load0 Proto L java.util.Ite…

branchを切ったらすぐにpushしてCIだけは通しておこう

前提 masterやdevelpoブランチでビルドが通っている その状態で作業branchを作成する branchを作ったら、何も更新してなくてもすぐにpushしてCIは通しておく 理由 CIが壊れるのは自分の更新だけが理由ではない CI設定の間違い サーバーが更新されて動作しな…

Kotlinでinterface定義モジュールと実装モジュールを分離した上で実装を隠蔽する

やりたいこと interface定義と、その実装をなるべくキレイに切り分けたい インターフェース定義用モジュール // ":interface-module" に定義を書いていく... interface AuthService { fun login(id: String, password: String) } 実装用モジュール // ":impl…

Androidアプリビルドの並列最大化の限界値

この記事ではコマンドラインによるフルビルドのみを対象にする gradleのソースコードと挙動観察での現時点での推測 ビルド速度に影響する要素 CPU論理コア数 シングルコアスペック メモリ プロジェクト自体の並列性 gradleのworker設定 gradleには --max-wor…

Firestoreのローカルエミュレーターは同時にトランザクション接続しすぎるとフリーズする

問題点 表題のまま 100個くらいのUnitTestがgoroutineで2〜3のトランザクションを並列発行した フリーズした 回避 UnitTest時のみ、トランザクションが集中する箇所でmutexによる排他制御を入れた まあしゃあない

FirestoreとMemorystoreとDatastoreと

Google Cloud Platformのサーバーデータはどこに保存するか SQL系は月額固定課金なので、気軽には使えない(お金持ちを除く) なので従量課金制の保存先としてDatastoreを気に入っていた DatastoreとMemcache DatastoreはFirestoreと両立できない アプリがFi…

Google App Engineで香川県ゲーム条例に対応する

雑感 条例が最短で春に施行される なるべく簡単に香川県民スマホ禁止条例に対応しなければならない X-AppEngine-City, X-AppEngine-CityLatLong Google App Engineはリクエスト元のIPからざっくりとした国・都市情報を取得できる X-AppEngine-City ヘッダを…

LiveDataを複数回observeしても1個のObserverしか登録されない現象と解法

前提 LiveDataのonActive/onInactiveで処理を行わせていた 強制的にLiveDataをactiveにするため、次のようなExtensionを作った LiveDataをactiveにしたいだけなので Observerはナニも処理していない // 強制的にLiveDataをactiveにする fun <T> LiveData<T>.forceA</t></t>…

10年代の思い出 / JavaのゲームをBREWへ移植した思い出ばなし

BREWとは 最近ではSnapdragonで有名なクアルコムがかつて開発していたOS 日本人的には auの KCP/KCP+ だ ガラケー全盛のauを支えようとしていた、かつての クソ OSだ 2010年代が終わり、記憶が消えてしまう前に、彼について記録と記憶を留めておこうと思う B…

続 RecyclerView in FragmentContainerView in MotionLayoutでリストが描画されない問題

Androidバージョンの切り分け これはAndroid 8.x以上で発生する Android 7.xでは発生しない 問題点1, そもそもRecyclerViewのWidth/Heightが0dpである デフォルトのvisibilityがGONEの場合、VISIBLEに切り替えてもレイアウトのサイズが再計算されない ワーク…

flutter buildで "Target kernel_snapshot failed" が出た場合の対処

エラー内容 flutter buildすると、dartコンパイル自体が異常終了する flutter clean flutter build aot Wrong full snapshot version, expected '20e5c4f7dc44368ac5a17643b93665f6' found '8343f188ada07642f47c56e518f1307c' Building AOT snapshot in rel…

2019年に作ったAndroid用ライブラリと、作った割に役立たなかったライブラリ

2019年、自分用に色々作っては「まあええやん」「コレあかん」という感じで新しいものを試したり壊したりしてきた ライブラリを作るのは個人的な趣味であり、いろんな設計を試せる娯楽であり、勉強でもある armyknife-* armyknifeシリーズ 自分用の十徳ナイ…

外出先での作業にモバイルモニターを導入した感想

動機 ほしかった やってみたかった 便利そうだった 購入したもの cocopar 12.5インチ/2K モバイルモニター/モバイルディスプレイ/薄型/IPSパネル/USB Type-C/標準HDMI/mini DP/保護カバー付/560g/3年保証 (カバー付)メディア: エレクトロニクス 4Kにしなかっ…

突然Google App Engineの特定APIが2回に1回しか繋がらなくなった問題への対処

状況 GAE/Go 1.12を使っている 複数のServiceをデプロイしていて、今回問題になったのは 認証用APIを提供しているService 環境セットアップのため、APIを連続で叩いてているとき、それはおこった 50回くらい同じAPIを叩く 動かなくなる直前 ナニもしていない…

Windows版Android Studioのターミナルでbashする

Windows版のTerminal IntelliJやAndroid Studioの標準Terminalはプラットフォームに合わせて起動する Windowsはcmd.exeが起動 bashのほうがなれてて使いやすい Terminalを変更する Settings > Tools > Terminal > Shell Path 標準だとcmdになってる こんなバ…

Windows版Android Studioの動作を軽くする

Windows版Android Studioは遅い どういうわけかデフォルト設定だと遅い CPUスペックとかに関係なく遅そう Code Completionが遅い LayoutEditorのプレビューが遅い そもそも起動が遅い どうにか高速化したい LinuxとかMacとかでは軽い 原因 Android Studio 3.…

開発リソースがないなら、Google Playのリリースは取り下げておけ、という経験則

こんな状況は危ない 昔は自社でアプリ開発してたけど、もうメンテしなくなって久しい とりあえずアップしておいて、使う人がいるならソレでいいや 何が起きるか Google Playは年1〜2回くらいはConsoleのアップデートがある アップデートにより、一部のアプ…

やっぱ時刻でIDとってるようなのはダメだな

何が起きたか 時刻ベース(ナノ秒)でUnique IDを割り振っていた 速度を向上させた UnitTestの実行速度が向上した みんなも使おうRyzen TR 人類皆RAM 64GB 何故かテストが落ちまくる ランダムで落ちまくる ランダムで成功する 1時間位頭抱えてた 問題点を見…