アプリ開発備忘録

PlayStationMobile、Android、UWPの開発備忘録

protobuf-grpcのJVMコード生成がいつまでもNullアノテーションに対応しないので無理矢理対応させる

protobuf, gRPCを使っているサーバーと通信するために公式が用意しているコード生成を使用しています。 https://github.com/protocolbuffers/protobuf/tree/master/java https://github.com/grpc/grpc-java https://github.com/grpc/grpc-kotlin (バックエン…

KotlinでGradleのプラグインを作成し、タスクを作成する

Gradleのプラグインを作成してみたくなったので、作ってみた。以下のリポジトリにコードがあるが、その主要点を書き残す。 https://github.com/matsudamper/kotlin-gradle-plugin-example プラグイン側 build.gradle.kts plugins { // 現状ではGradle Kotlin…

【SwiftUI】Listの最小の高さを設定する

SwiftUIのListでは、デフォルトで最小の高さが設定されているので、小さいアイテムを設定しても、余白ができてしまいます。 なので以下のように最小の高さを0に設定してあげることで詰められます。 コード 設定方法がわかりにくすぎる。 List { } .environme…

SwiftUIでFlowLayout

仕事でSwiftUIを使っていて、書いたものを載せておきます。SwiftUIのCustomView、なかなかわかりにくくて辛かったです。 FlowLayout childrenとかlineSpacingとかはinitで入れたりしてください。 iOS13だと高さが小数点で変化して、無限に更新されたりして辛…

【kts編】KotlinをGradleでビルド

groovy編 https://matsudamper.hatenablog.com/entry/2019/09/17/064542 コード tasks.withType(Jar::class) { manifest { attributes["Main-Class"] = "package.to.MainKt" } from( configurations.runtimeClasspath.map { it.toList().map { if(it.isDirec…

【Jetpack Compose】CoordinatorLayoutのenterAlwaysを作る

概要 CoordinatorLayoutのenterAlwaysを作成します。 必要なもの等 スクロールを検知して止めたりする レイアウトを移動させる 影の制御 Compose 解説は末尾でやります。 完成品 @Composable public fun HeaderEnterAlwaysColumn( modifier: Modifier = Modi…

RyzenでAndroid Studioのエミュレータが起動しない場合

ブートで固まって起動しない場合。以下を実行して再起動。 bcdedit /set hypervisorlaunchtype off 戻す場合 bcdedit /set hypervisorlaunchtype auto DockerやWSL2が使えなくなるところが痛い。通常はWindwos sybsystem for Androidが来たらそれを使って、…

WSL2でssh-add

WSL

Could not open a connection to your authentication agent. 以下を実行してから。 eval "$(ssh-agent -s)" ssh-addをする。 ssh-add ~/.ssh/id_rsa

Elastic Beanstalkで使っているロードバランサを作り直してみる

AWS

EC2のロードバランサから当該ロードバランサを削除済み。 作り直す 名前は適当に設定。 VPCは元からデフォルトだったので特に設定はいじらず。 セキュリティーグループは前に付いていたものと同じものを付ける。リスナも同様。 注意点 ここのドメインは変わ…

NginxでAWS VPC内で通信するためにDNSを指定する

AWS

構成 internalなドメインを使ってVPC内で通信を行います。 フォワーダを一回通してから後段のアプリケーションに通信を流します。 (ALB -> Application(Nginx)) -> (ALB -> Application) 設定 所属しているVPCのIPを調べます。ここでは 172.31.0.0 です。 こ…

Elastic BeanstalkでECRを使えるようにする

AWS

既にECRにpushはされている前提。 ポリシーを追加する Elastic BeanstalkのIAMインスタンスプロフィールのIAMにポリシーを追加します。 AmazonEC2ContainerRegistryReadOnly ポリシーをアタッチします。

Elastic BeanstalkサービスロールとIAM インスタンスプロフィールの違い

AWS

デフォルトでは以下のようになっていました。 サービスロール: aws-elasticbeanstalk-service-role IAM インスタンスプロフィール: aws-elasticbeanstalk-ec2-role サービスロール https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/concepts-r…

Elastic Beanstalkで作った環境にIPでアクセス制限を入れる

AWS

開発用でアクセスを制限したいのでやります。 セキュリテーグループを探す Elastic BeansTalkの以下を確認します。 設定 -> インスタンス -> インスタンスセキュリティグループ そのセキュリティーグループをEC2から探します。 インバウンドルールのソースに…

WSL2のDockerトラブルシューティング

環境 Ubuntu ECRにログインできない場合 AWSのECRの説明どおりにコマンドを実行すると、docker loginする時に問題が発生します。 time="2021-10-09T00:26:47+09:00" level=error msg="failed to create file hook: while creating logrus local file hook: u…

xargsで一つづつコマンドを実行する

複数行の出力を加工してコマンドに適用します。 タグが付いていないイメージを削除 xargs -L 1 docker images | grep "<none>" | awk '{ print $3 }' | xargs -L 1 docker rmi</none>

awk備忘録

使用文字列 docker images で出された文字列 REPOSITORY TAG IMAGE ID CREATED SIZE name latest abcdefghijkl About a minute ago 615MB <none> <none> abcdefghijkl 3 minutes ago 615MB <none> <none> abcdefghijkl 5 minutes ago 615MB 使用 docker images | awk '{ print $3 }' </none></none></none></none>…

jq備忘録

オブジェクトから値を取得する jq '.[]' echo '{ "name": "value", "name2": "value2" }' | jq '.[]' "value" "value2" echo '{ "array": [ {"name": "value", "name2": "value2"} ] }' | jq '.[]' [ { "name": "value", "name2": "value2" } ] オブジェクト…

SupervisorJobは基本必要が無いのではないかと思っている

はじめに 以下のコードではtry-catch構文は使用せず、runCatchingを使用しています。文章の中で出てくるrunCatchingはtry-catchと置き換えてもらって大丈夫です。 SupervisorJobを使用しないコード 以下のコードは特にエラーもなく動きます。 withContext im…

targetSdkVersionをアップデートする前に先にcompileSdkVersionだけ上げませんか

Target 仕事でアプリ開発をしている人 QAの工数がまだ取れないのでまだtargetSdkVersionが上げられない compileSdkVersionを上げよう 詳しくは全てここを読めばいいです。 https://medium.com/androiddevelopers/picking-your-compilesdkversion-minsdkversi…

【Jetpack Compose】テキストのベースラインとその他の要素の下部を合わせる

テキストのベースラインとアイコン等を下部に揃えます。 ベースラインではなくて、ただ単純に要素の下部を揃えたい場合は Row(verticalAlignment = Alignment.Bottom) で十分です。 テキストのベースラインを揃える まずテキストのベースラインを揃えるには …

【Jetpack Compose】横幅に応じてLayoutをScaleさせる

Usecase デザイン上、1行で表示させたいが、デバイスによっては横幅に収まらない。しかし改行をさせたくないものがあったので作りました。 上の様な感じではなく、下のように表示したい場合に使用します。 両方とも文字サイズ30spを使用し、表示できるデバイ…

【Jetpack Compose】@ComposableをInner関数で使用しないほうが良い

env composeOptions { kotlinCompilerVersion "1.5.10" kotlinCompilerExtensionVersion "1.0.0-rc01" } code 2つ目のViewを押すと called が2回呼ばれています。 TestViewをRoot関数の外に出すと1回だけになりました。 何故か更新の無いはずのRowの最初のVi…

【差分計算の仕組み】@Composableの引数にListを取ると差分計算がされない。 【Stable, Immutable】

このような動的に変更されるtimeがあります。 class TagViewModel(private val coroutineScope: CoroutineScope) { val time: MutableStateFlow<String> = MutableStateFlow("") init { coroutineScope.launch(Dispatchers.Default) { while (isActive) { time.value</string>…

【Android】Jetpack Composeの画像読み込みと加工のバットプラクティス

※追記 デバッグビルドと本番ビルド、端末ごとにパフォーマンスが大きく異る事がわかったので、パフォーマンスが悪いのはそれのせいかもしれません。(特に自分はPixel5でパフォーマンスが悪かったです。Pixel3は問題なかったですが。) 前提 rc01が出ています…

IntelliJ IDEAでアップデートしたらクリックが効かなくなった場合

クリックしても何も反応しない場合、IntelliJ IDEAを動かしているJavaのバージョン(Java Runtime)を変更する事で直ることがあります。 Shiftを2回押して検索パネルを開いて choose runtime とか打ちます。そこからバージョンを戻したり、最新にしたりを試し…

lightweightとheavweightとは【Java AWT】

SwingやAWTを使用する時にWindowsのAPIを叩きたい時にネイティブウィンドウハンドル(HWND)を取得したい場合があります。 heavweightはネイティブスクリーンリソースに紐付けられている為、HWNDが取得できますが、lightweightはネイティブに紐付けられていな…

Jetpack Compose Desktop 0.3->0.4のマイグレーション

自分の観測したものだけですが、記述します。 バージョン from: 0.3.0-build152 to: 0.4.0-build168 build.gradle.kts 0.3.0 compose.desktop { application { mainClass = "MainKt" nativeDistributions { targetFormats(TargetFormat.Dmg, TargetFormat.Ms…

Enumを扱う【kotlinx.serialization】

Enumもカスタムタイプのパースと同じく、 Serializer を作成しなければなりません。Jacksonは @JsonCreator と @JsonValue だけでできるので、少し面倒に感じましたが、メリットはあります。 Stringの値でパースする abstract なシリアライザを作成しました…

Apollo KotlinでCustomTypeを使用する

GitHub APIで使用していたら、一部がAnyになってしまいました。 以下のようなファイルが生成されていました。 これを2つの工程で好きな型に変換します。 // AUTO-GENERATED FILE. DO NOT MODIFY. // // This class was automatically generated by Apollo Gr…

テキストとrippleのテーマを上書きする【Jetpack Compose(Desktop)】

バージョン情報 plugins { kotlin("jvm") version "1.4.30" id("org.jetbrains.compose") version "0.3.0-build150" } 本文 PopupMenuを作成するのに黒くしたいなということで行いました。 CompositionLocalProvider を使用して上書きします。 CompositionLo…