eaglesakuraの技術ブログ

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

Flutterアプリ開発環境の長所短所

M1X出ないのかよ!! Apple発表会で出なかったので、手持ちの環境の再整備を行うことにした 各環境のレビュー Intel Mac mini 2018 + Windows i7 6C12T / RAM 64GB 従来の開発環境 iOSアプリビルドにはmacが必須なので用意した環境。 WindowsからVSCode Remo…

Android12対応でやったこと

もうすぐAndroid 12がリリースされるので、最低限対応した内容をメモする。 Android Studio AF対応 新AndroidStudioにビルドツールを切り替えた UnitTestをRobolectricからInstrumentation Testをメインに変更 Android Studio AFから、Robolectricが実行しづ…

SONYのHDDレコーダーのリモート予約が正常動作しなくなったのでエンジニア的カンで直した

利用機器 SONY製 BDR-BDZ-FW2000(容量2TB, ホームサーバー機能対応のモデル。以下レコーダー) マンション標準のネットワーク(グローバルIPは割り当てられない, 1家庭500~800MBps程度の速度が最大) Google Nest Wi-Fi(ただしレコーダーはハブを介して有…

GCPを使って子供関係の通知をLINEに統合する

なにをやったのか 子供が保育園・小学校・学習塾に通っている それぞれ、お知らせがWebに掲載される(日記とかも含む) 個別連絡はメールで届く(学年単位の緊急連絡とか) いちいち学校のウェブサイトで確認したりメールを検索するのが面倒なので、LINEに通…

ビルドの並列化をしすぎてCPU占有率100%になってしまったAndroid Studioプロジェクトの対処

何が起きたか モジュール分割や様々な工夫をしてビルド時の並列性を高めた 高めすぎて、Ryzen 3950Xの 16コア 32スレッド の能力を超えた並列性を持ってしまった その結果、Gradleのビルドを行うとすべてのCPUリソースを完全に食い尽くすようになった Zoomと…

Android Studio Arctic Fox Canary-11の所感

現状の利点 Jetpack Compose(Beta, production-ready)が使える AS 4.1.xからの移行 Android Gradle Pluginバージョン変更 gradlewバージョン変更 基本的に素直に移行できた。 現状の問題点 Library Projectで問題が出る。 Application Projectでは使えている…

イカれた映画観客を紹介するぜ!!

持ち込んだペットボトルをごっきゅごきゅと音を立てて就活生風の男 / TOHOシネマズ上野 / ラブライブサンシャイン TOHOシネマズは基本的に飲食物は持ち込み禁止のはず ごっきゅごきゅと音を鳴らして飲んでクソうるせー 人間ってあんな音を立てながら飲めるん…

docker-composeでgoogle/cloud-sdk:emulators(firestore emulator)を利用する

docker-compose記述 version: "3" services: firestore-emulator: image: google/cloud-sdk:329.0.0-emulators ports: - 8004:8004 command: gcloud beta emulators firestore start --host-port "0.0.0.0:8004" これで docker-compose up で起動できる。 ポ…

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に切り替えてもレイアウトのサイズが再計算されない ワーク…